【20171013】opencv下斑马线识别实例及可能报错的bug

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xumeng7231488/article/details/78223309

1.在vs2013上配置opencv报错:

“在vs2015中配置Opencv,无法找到源文件”opencv2/opencv.hpp””
可能是配置时配置错位置了,一定要在debug|x64下配置

2.代码报错:

“float,return,;之类错误”
define那里不能换行,去掉\改到一行里面就可以了

3.fopen错误:

“fopen maybe unsafe,consider using fopen_s instead”
fopen文件自的文件位置在:*\build\include\opencv2\flann\logger.h中,但是如果将fopen替换为fopen_s将出现函数变化,参数个数和参数列表也变化的情况。

解决方法:更改预处理定义:
此方法转载自:http://blog.csdn.net/u012734441/article/details/39374577

项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加_CRT_SECURE_NO_DEPRECATE
这样就可以解决vs201X报错的问题了。

4.斑马线识别实例

(1)代码
代码原创:http://blog.csdn.net/dawn1227/article/details/64125542
有几行修改

#include <iostream>  
#include <opencv2/opencv.hpp>  

using namespace std;
using namespace cv;

#define cvQueryHistValue_1D( hist, idx0 )((float)cvGetReal1D((hist)->bins, (idx0)))

int bSums(Mat src)
{

    int counter = 0;
    //迭代器访问像素点  
    Mat_<uchar>::iterator it = src.begin<uchar>();
    Mat_<uchar>::iterator itend = src.end<uchar>();
    for (; it != itend; ++it)
    {
        if ((*it)>0) counter += 1;//二值化后,像素点是0或者255  
    }
    return counter;
}

int main()
{

    Mat image = imread("pic.jpg", CV_LOAD_IMAGE_COLOR);
    Mat I;
    cvtColor(image, I, CV_BGR2GRAY);

    Mat roi1(I, Rect(0, 260, 1024, 100));
    threshold(roi1, roi1, 180, 255, CV_THRESH_BINARY);   //灰度变二值  
    cout << "读取成功" << endl;
    namedWindow("1", CV_WINDOW_AUTOSIZE);
    imshow("1", roi1);
    cout << "显示1成功" << endl;
    waitKey(500);

    int a = bSums(roi1);//调用函数bSums  
    cout << "bSum函数调用成功" << endl;
    imshow("A", roi1);
    cout << "显示2成功" << endl;
    //imwrite("pic2.jpg", roi1);
    //cout << "读写成功" << endl;
    if (a > 5000) {
        cout << "注意:前方有斑马线" << endl;
    }
    else cout << "什么都没有啊!" << endl; 
    waitKey();

    return 0;
}

(2)识别结果:
注意:前方有斑马线

猜你喜欢

转载自blog.csdn.net/xumeng7231488/article/details/78223309