我試圖設置二進制圖像中某些像素的RGB值。但是每當座標超過(89,89),它就會給我一個斷言錯誤!我的圖像分辨率很好,因爲我正在從(150,150)座標訪問RGB值。如果座標是(89,89)或更少,它可以正常工作。我的代碼:在openCV中設置某個圖像中的像素的RGB值
cv::Mat img_gray, img_bw;
//read an image
cv::Mat3b img_bgr = cv::imread("test.jpg");
cv::imshow("Original Image", img_bgr);
//conversion to binary from color
cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY);
cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY);
//accessing BGR of position (150, 150) from a color image
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl;
//Setting BGR of position (150, 150) in binary image
img_bw.at<Vec3b>(150, 150)[0] = 255;
img_bw.at<Vec3b>(150, 150)[1] = 255;
img_bw.at<Vec3b>(150, 150)[2] = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<Vec3b>(150, 150)<<std::endl;
這裏,如果我把89而不是150在「設置BGR」部分,那麼它的作品。否則全部錯誤是:
OpenCV的錯誤:斷言失敗(變暗< = 2 & &數據& &(無符號)10 <(無符號)size.p [0] & &(無符號)(I1 *字段類型字段< _TP > ::通道)<(無符號)(size.p 1 *通道())& &((((的sizeof(爲size_t)< < 28)| 0x8442211)>>((數據類型< _TP> ::深度)&( (1 < < 3)-1))* 4)& 15)== elemSize1())in cv :: Mat :: at,file e:\ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.hpp,line 538
那麼這是什麼類型的內存空間錯誤? 在此先感謝幫助! :)
更新:我試過這種方式!但是現在輸出結果是空白的。
cv::Mat img_gray, img_bw;
//read an image
cv::Mat3b img_bgr = cv::imread("test.jpg");
cv::imshow("Original Image", img_bgr);
//conversion to binary from color
cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY);
cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY);
//accessing BGR of position (150, 150) from a color image
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl;
//Setting BGR of position (150, 150) in binary image
img_bw.at<uchar>(150, 150) = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<uchar>(150, 150)<<std::endl;
我的測試圖像在這裏
和輸出是在這裏
您的img_bw是灰色的。所以你不能通過輸入img_bw.at來訪問任何像素。你應該改用img_bw.at (150,150)= 255 –
alex
@alex我已經試過了。在那種情況下,我的std :: cout <(150,150)簡直是空白! –
@TousifZaman我們無法修復您不會顯示給我們的代碼。你知道使用'Vec3b'是不正確的。如果您使用'uchar'向我們顯示您的代碼以及錯誤和您的輸入圖像,或許我們可以幫助您。 – beaker