0

灰色の画像があり、8 ピクセルごと (ピクセルのブロック) からピクセル値を取得したい 灰色の画像からこのピクセルのブロックを読み取るにはどうすればよいですか? これは私が作ったコードです

void main()

{
 Mat img = imread("Frame.jpg",0);

if(!img.data)   
    std::cout << "error";

double minVal, maxVal;
minMaxLoc(img,&minVal,&maxVal,NULL,NULL);
double Threshold = 0.5 * (minVal + maxVal);
int i,j;
for (i=0;i<img.rows;i++)
    for(j=0;j<img.cols;j++)
        unsigned char Pixel = img.at<unsigned char>(i,j);




namedWindow( "Display window", CV_NORMAL );// Create a window for display.
    imshow( "Display window", img );
 waitKey(0);    

     }

ありがとう

4

1 に答える 1

0

何をしようとしているのか正確にはわかりませんが、中心のピクセルを囲むピクセルを取得しようとしている場合は、インデックスを調整して手動で行うことができます。ピクセルの周りのブロックが次のようにラベル付けされている場合:

0 1 2
3 P 4
5 6 7

ループでこれを行うことで、0〜7の値を取得できます

for (i=1;i<img.rows-1;i++){
    for(j=1;j<img.cols-1;j++){
        unsigned char Pixel = img.at<unsigned char>(i,j);
        unsigned char Pixel_0 = img.at<unsigned char>(i-1,j-1);
        unsigned char Pixel_1 = img.at<unsigned char>(i,j-1);
        unsigned char Pixel_2 = img.at<unsigned char>(i+1,j-1);
        unsigned char Pixel_3 = img.at<unsigned char>(i-1,j);
        unsigned char Pixel_4 = img.at<unsigned char>(i+1,j);
        unsigned char Pixel_5 = img.at<unsigned char>(i-1,j+1);
        unsigned char Pixel_6 = img.at<unsigned char>(i,j+1);
        unsigned char Pixel_7 = img.at<unsigned char>(i+1,j+1);
    }
}

あるいは、ウィンドウ全体を新しい cv::Mat にサブセット化したい場合は、ROI を使用できます。

for (i=1;i<img.rows-1;i++){
    for(j=1;j<img.cols-1;j++){
        unsigned char Pixel = img.at<unsigned char>(i,j);
        cv::Mat ROI = img(cv::Rect(i-1,j-1,3,3));
    }
}

どちらの場合も、ループは 1->rows-1 と 1->cols-1 の間のみであることに注意してください。境界のケースを個別に処理する必要があります。

于 2013-11-11T19:24:37.913 に答える