我正在尝试遍历HSV图像,但它一直崩溃。
Mat a=imread("play.jpg");
Mat hsvimage, hsvimage2,cont;
cvtColor(a, hsvimage, CV_BGR2HSV );
imshow("image",a);
inRange(hsvimage, Scalar(20, 100, 100), Scalar(170, 255, 255),hsvimage2);
imshow("Thresholded image",hsvimage2);
for(int i=0; i<hsvimage2.rows; i++)
for(int j=0; i<hsvimage2.cols; j++)
//the line belows keeps failing
std::cout <<hsvimage2.at<uchar>(i,j) << " " << hsvimage2.at<uchar>(i,j) << " " << hsvimage2.at<uchar>(i,j) << std::endl;
最佳答案
可能会崩溃,因为您在内部循环中有一个错字,您在终止条件中与i
而不是j
进行比较。
for(int j=0; i<hsvimage2.cols; j++)
另外,如果有BGR图像进入(3通道),则将获得HSV图像(3通道),但是您将访问像素就像它们是单通道一样。为循环尝试以下操作,以转储H,S和V值:
for(int i=0; i<hsvimage2.rows; i++)
{
for(int j=0; j<hsvimage2.cols; j++) // original error was on this line
{
Vec3b pHSV = hsvimage2.at<Vec3b>(i, j);
std::cout << pHSV.val[0] << " "
<< pHSV.val[1] << " "
<< pHSV.val[2] << std::endl;
}
}