あなたはこのような何かを行うことができます。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat img;
void
CallBackFunc(int event,int x,int y,int flags,void* userdata)
{
if(event==EVENT_MOUSEMOVE){
cout << "Pixel (" << x << ", " << y << "): " << img.at<Vec3b>(y,x) << endl;
}
}
int main()
{
// Read image from file
img=imread("demo.jpg");
// Check it loaded
if(img.empty())
{
cout << "Error loading the image" << endl;
exit(1);
}
//Create a window
namedWindow("ImageDisplay",1);
// Register a mouse callback
setMouseCallback("ImageDisplay",CallBackFunc,nullptr);
// Main loop
while(true){
imshow("ImageDisplay",img);
waitKey(50);
}
}
を有用なコメントの結果、I(うまくいけば)は、コードを改善し、今でグレースケール画像を処理し、また、RGBに設定していますOpenCV以外の熱狂者がそれを期待しているかもしれない、つまりBGRではなくRGBに近づくように命令する。更新された機能は以下の通りです:
void
CallBackFunc(int event,int x,int y,int flags,void* userdata)
{
if(event==EVENT_MOUSEMOVE){
// Test if greyscale or color
if(img.channels()==1){
cout << "Grey Pixel (" << x << ", " << y << "): " << (int)img.at<uchar>(y,x) << endl;
} else {
cout << "RGB Pixel (" << x << ", " << y << "): " << (int)img.at<Vec3b>(y,x)[2] << "/" << (int)img.at<Vec3b>(y,x)[1] << "/" << (int)img.at<Vec3b>(y,x)[0] << endl;
}
}
}
これは超クールです! –
画像に3つのチャンネルがあり、グレースケール画像を多少違った方法で処理しているかどうかを確認する必要があります。たぶん後で... –
それはよさそうだね! Tnx。(Y、X) img.at(Y、X)img.atする...しかし、なぜ、私が代わりに0〜255の整数の奇妙な文字を参照してください。私はグレースケール画像から強度値を確認したい場合は、私は変更します?? –
jok23