我剛開始學習C++和OpenCV。我試圖編寫一個程序,讓我點擊一個像素並在BGR中打印出像素值。到目前爲止,當我點擊時,我的程序返回點擊像素的座標,但是當我想訪問BGR值時,我的程序崩潰了。我從我的網絡攝像頭流式傳輸視頻作爲輸入,並且在編譯時我沒有遇到任何錯誤。嘗試訪問OpenCV中的像素值時發生錯誤
我一直在讀這裏很多類似的問題,但我還沒有找到任何解決方案。
我的程序崩潰時,包括行: 「cv :: Vec3f BGR = matOriginal.at(單擊[0] [0],單擊[0] [1]);」
我的程序的其餘部分如下:
int click[1][2];
void mouseEvent(int Event, int x, int y, int flags, void* param)
{
if(Event == CV_EVENT_LBUTTONDOWN)
{
printf("Valgt pixel: [%d,%d] \n ",x,y);
click[0][0] = x;
click[0][1] = y;
}
}
int main()
{
VideoCapture capWebcam(0);
if(capWebcam.isOpened() == false)
{
printf("Error: capWebcam not accessed successfully \n");
return(1);
}
Mat matOriginal;
char charCheckForEscKey=0;
while(charCheckForEscKey !=27)
{
if(capWebcam.read(matOriginal) == NULL)
{
printf("Error: Frame not read\n \n");
break;
}
cv::imshow("Original",matOriginal);
setMouseCallback("Original",mouseEvent,0);
// Print BGR-value when mouseclick
if(click[0][0]>0 && click[0][1]>0)
{
cv::Vec3f BGR = matOriginal.at<cv::Vec3f>(click[0][0],click[0][1]); // When this statement is included, I get an ERROR
double B=BGR[0]; // B
double G=BGR[1]; // G
double R=BGR[2]; // R
click[0][0] = 0; // Resetting the click-matrix
click[0][1] = 0;
}
charCheckForEscKey = cv::waitKey(10);
}
return(0);
}
我使用Microsoft Visual C++ 2013次特快
在此先感謝您的幫助
看來你的'click'變量沒有初始化(包含垃圾)。嘗試用'cv :: Vec3f BGR = matOriginal.at(點擊[0] [1],點擊[0] [0]);',你應該檢查'點擊[0] [0]還是點擊[0] [1]'在嘗試訪問'matOriginal'元素之前超出範圍。 –
Jigsore
我認爲你需要檢查matOriginal的類型(print matOriginal.type())以確保它確實是Vec3f而不是Vec3b。這個簡單的事實可能可以解釋你所有的問題。 – carlosdc
錯誤是什麼? –