OpenCV Error:Assertion failed ...

在編寫程序時遇見了兩個錯誤:

1.在用函數cornerSubPix(image, corners, winSize, zeroZone, criteria);求亞像素角點時遇見錯誤:


Assertion failed (ncorners >= 0 && corners.depth() == CV_32F) in cornerSubPix

原因是:

std::vector<cv::Point> corners  應該爲:std::vector<cv::Point2f> corners


2.在求灰度圖像某個點的灰度值時


//函數 double getidata()提取灰度圖像固定地方灰度值
double getidata(Mat p, int x, int y)
{

Scalar intensity;

intensity = p.at<uchar>(x, y);

return intensity.val[0];

}

出現錯誤:

OpenCV Error: Assertion failed <dims <=2 && data && <unsigned >i0 < <unsigned>size.p[0] && <unsigned >< i1


原因是


經過調試發現發生這種錯誤的原因在於,你訪問構造矩陣時越界了,所以報錯,,例如:


cv::Mat mat1 = cv::Mat::zeros(480,640,CV_8UC1);


mat1.at<uchar>(481,643)
你構造的mat1爲640X480的矩陣,你卻訪問了643X481那就肯定會出錯,所以在每次訪問之前一定要 記得加上


if(i>=0 && i<mat1.cols && j>=0 && j< mat1.rows)


mat1.at<uchar>(j,i);


這樣 就可以保證你訪問的元素在這個行,列之內了。


即程序可改爲:

double getidata(Mat p, int x, int y)
{
Scalar intensity;
if (x >= 0 && x<p.cols && y >= 0 && y< p.rows)
 intensity = p.at<uchar>(y, x);//
return intensity.val[0];
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章