基于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() 不接收轨迹栏传递的值

c++ opencv 图像模糊度检测

Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结

圆形标定板标定的opencv c++实现

图像识别 基于Keras的手写数字识别(含代码)