Visual C++ と OpenCV を使用しています。
OpenCV で Mat のピクセル要素にアクセスするにはどうすればよいですか。
つまり、ピクセルが 1 または 0 であるかどうかをバイナリ Mat 画像で確認したい...画像がバイナリしきい値である...
x と y (または行と列) を使用してピクセルにアクセスし、この値を確認するにはどうすればよいですか?
手伝って頂けますか?前もって感謝します。
Visual C++ と OpenCV を使用しています。
OpenCV で Mat のピクセル要素にアクセスするにはどうすればよいですか。
つまり、ピクセルが 1 または 0 であるかどうかをバイナリ Mat 画像で確認したい...画像がバイナリしきい値である...
x と y (または行と列) を使用してピクセルにアクセスし、この値を確認するにはどうすればよいですか?
手伝って頂けますか?前もって感謝します。
Mat 要素へのアクセスについては、OpenCV の公式ドキュメントを参照できます。これらのlink1 、 link2が役立つ場合があります
そして、マウスの位置に応じてピクセル値にアクセスし、ピクセル値を表示する簡単なコードを次に示します。
#include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat image, src;
char window_name[20]="Pixel Value Demo";
void onMouse( int event, int x, int y, int f, void* ){
image=src.clone();
Vec3b pix=image.at<Vec3b>(y,x);
int B=pix.val[0];
int G=pix.val[1];
int R=pix.val[2];
char name[30];
sprintf(name,"R=%d",R);
putText(image,name, Point(10,130) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
sprintf(name,"G=%d",G);
putText(image,name, Point(10,170) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
sprintf(name,"B=%d",B);
putText(image,name, Point(10,210) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
sprintf(name,"X=%d",x);
putText(image,name, Point(10,300) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
sprintf(name,"Y=%d",y);
putText(image,name, Point(10,340) , FONT_HERSHEY_SIMPLEX, .7, Scalar(0,255,0), 2,8,false );
imshow( window_name, image );
}
int main( int argc, char** argv )
{
namedWindow( window_name, CV_WINDOW_AUTOSIZE );
src = imread( "ball.jpg");
imshow( window_name, src );
setMouseCallback( window_name, onMouse, 0 );
waitKey(0);
return 0;
}
編集:-
バイナリ イメージの場合、Mat::at(row,col) メソッドでピクセル値にアクセスできます。
以下の例で、これを行う方法を示します。ここでは、イメージはタイプ uchar です。
Mat src(480,640,CV_8UC1,Scalar(0));
circle(src,Point(src.cols/2,src.rows/2),100,Scalar(255),-1,8,0);
int pix=(int)src.at<uchar>(src.rows/2,src.cols/2);
cout<<pix<<endl;