1. 程式人生 > >【20171013】opencv下斑馬線識別例項及可能報錯的bug

【20171013】opencv下斑馬線識別例項及可能報錯的bug

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)識別結果:
注意:前方有斑馬線