2017-02-17 5 views
3

私はMATLABでimpixelinfo()に似ているOpenCVの関数を探しています。OpenCVので利用可能なMATLABの「impixelinfo()」同様の機能はありますか?

impixelinfo() in matlab shows you this

impixelinfo()はあなた

  1. (x, y)
  2. 画像でホバリングカーソルのピクセル強度、

    状の画素の位置を示し

    のOpenCVでこれのいずれかの実装がすでにありますか?誰もがそれの個人的なバージョンを作成していますか?

答えて

6

あなたはこのような何かを行うことができます。

#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); 
    } 
} 

enter image description here

を有用なコメントの結果、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; 
     } 
    } 
} 
+0

これは超クールです! –

+1

画像に3つのチャンネルがあり、グレースケール画像を多少違った方法で処理しているかどうかを確認する必要があります。たぶん後で... –

+0

それはよさそうだね! Tnx。 (Y、X) img.at(Y、X)img.atする...しかし、なぜ、私が代わりに0〜255の整数の奇妙な文字を参照してください。私はグレースケール画像から強度値を確認したい場合は、私は変更します?? – jok23

関連する問題