程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 基於opecv 3.1的圖像模糊識別c++代碼,opecv3.1

基於opecv 3.1的圖像模糊識別c++代碼,opecv3.1

編輯:關於C語言

基於opecv 3.1的圖像模糊識別c++代碼,opecv3.1


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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved