【20171013】opencv下斑馬線識別例項及可能報錯的bug
阿新 • • 發佈:2019-01-14
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)識別結果:
注意:前方有斑馬線