-2

画像を読み取り、画面にピクセル値を表示するために次のコードを使用しています

#include<iostream>

#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv; 


int main()
{

Mat img = imread("C:\\cat.jpg", CV_LOAD_IMAGE_COLOR); //open and read the image

      if (img.empty())
     {
          cout << "Image cannot be loaded..!!" << endl;
          return -1;
     }

      cvtColor(img, img, CV_BGR2GRAY); //change the color image to grayscale image

 int rows = img.rows;
 int cols =img.cols;

 cv::Size s = img.size();
rows = s.height;
cols = s.width;

// this loop is to get all the pixel values
uchar val;
for(int r=0;r<rows;r++)
{
for(int c=0;c<cols;c++)
{
val = img.at<uchar>(r,c);
cout << (int)val <<"  ";
}
cout<<endl;
}
// to get a single value of pixelu need a variable 
val = img.at<uchar>(40,50);

    cout << (int)val << endl;

 imshow("showImg",img);
     cvWaitKey(0);

    return 1;


      waitKey(0); //wait for key press

      destroyAllWindows(); //destroy all open windows
return 0;
} 

// 大きな画像では問題なく動作しますが、8x8 の .jpg または .tiff 画像を使用すると // ピクセル値ではなく画像が表示され、エラーが発生します

//"opencvconfig.exe の 0x75c7c41f (KernelBase.dll) で未処理の例外: Microsoft C++ //例外: cv::Exception at memory location 0x0030f354.."

//このエラーが表示されます 1 助けてください できるだけ早く助けてください

4

1 に答える 1

0

これらの行を削除します

// to get a single value of pixelu need a variable 
val = img.at<uchar>(40,50);

cout << (int)val << endl;

(40,50) は有効な場所ではなく、それにアクセスすることが例外の原因である可能性が最も高いです

于 2013-11-02T12:06:03.250 に答える