基于opecv 3.1的图像模糊识别c++代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于opecv 3.1的图像模糊识别c++代码相关的知识,希望对你有一定的参考价值。
opencv3.1 +windows10+ vs2015配置见文章
win10下vs2015配置Opencv3.1.0过程详解(转)
代码经过测试,识别度极高,测试图片50w张,识别率90%以上
如果可以结合微软牛津计划的api可以识别图片物品 https://www.azure.cn/projectoxford/demo/vision#Ocr
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <iostream> #include "highgui.h" #include "cvaux.h" IplImage* praw; float VideoBlurDetect(IplImage* data) { int width=data->widthStep; int height=data->height; ushort* sobelTable = new ushort[width*height]; memset(sobelTable, 0, width*height*sizeof(ushort)); int i, j, mul; uchar* udata = (uchar*)data->imageData; for(i = 1, mul = i*width; i < height - 1; i++, mul += width) for(j = 1; j < width - 1; j++) sobelTable[mul+j]=abs(udata[mul+j-width-1] + 2*udata[mul+j-1] + udata[mul+j-1+width] - udata[mul+j+1-width] - 2*udata[mul+j+1] - udata[mul+j+width+1]); for(i = 1, mul = i*width; i < height - 1; i++, mul += width) for(j = 1; j < width - 1; j++) if(sobelTable[mul+j] < 50 || sobelTable[mul+j] <= sobelTable[mul+j-1] || sobelTable[mul+j] <= sobelTable[mul+j+1]) sobelTable[mul+j] = 0; int totLen = 0; int totCount = 1; uchar suddenThre = 50; uchar sameThre = 3; for(i = 1, mul = i*width; i < height - 1; i++, mul += width) { for(j = 1; j < width - 1; j++) { if(sobelTable[mul+j]) { int count = 0; uchar tmpThre = 5; uchar max = udata[mul+j] > udata[mul+j-1] ? 0 : 1; for(int t = j; t > 0; t--) { count++; if(abs(udata[mul+t] - udata[mul+t-1]) > suddenThre) break; if(max && udata[mul+t] > udata[mul+t-1]) break; if(!max && udata[mul+t] < udata[mul+t-1]) break; int tmp = 0; for(int s = t; s > 0; s--) { if(abs(udata[mul+t] - udata[mul+s]) < sameThre) { tmp++; if(tmp > tmpThre) break; } else break; } if(tmp > tmpThre) break; } max = udata[mul+j] > udata[mul+j+1] ? 0 : 1; for(int t = j; t < width; t++) { count++; if(abs(udata[mul+t] - udata[mul+t+1]) > suddenThre) break; if(max && udata[mul+t] > udata[mul+t+1]) break; if(!max && udata[mul+t] < udata[mul+t+1]) break; int tmp = 0; for(int s = t; s < width; s++) { if(abs(udata[mul+t] - udata[mul+s]) < sameThre) { tmp++; if(tmp > tmpThre) break; } else break; } if(tmp > tmpThre) break; } count--; totCount++; totLen += count; } } } float result = (float)totLen/totCount; delete[] sobelTable; return result; } int main() { //CvCapture* cvCreateCameraCapture(-1); float re; IplImage* praw=cvLoadImage("d:/123.jpg",CV_LOAD_IMAGE_GRAYSCALE); re=VideoBlurDetect(praw); std::cout<<re; cvNamedWindow("Example",CV_WINDOW_AUTOSIZE); cvShowImage("Example",praw); cvWaitKey(0); cvReleaseImage(&praw); cvDestroyWindow("Example"); return 0; }
以上是关于基于opecv 3.1的图像模糊识别c++代码的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB实战系列(三十四)-MATLAB基于PCA-LDA模糊神经网络的人脸识别
c++,opecv:HoughLines() 不接收轨迹栏传递的值