我正在尝试遍历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;
    }
}

10-08 04:16