我试图设置二进制图像中某些像素的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