Print coordinates and pixel values using Mouse callback
Asked Answered
S

1

6

This is the code which i tried, only the coordinate values are printed but not the pixel values.

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

void onMouse( int event, int x, int y, int, void* );
using namespace cv;

Mat img = cv::imread("b.jpg", 0); // force grayscale
Mat thresh=Mat::zeros(img.size(),CV_8UC1);

int main(int argc, char **argv)
{

    if(!img.data) {
        std::cout << "File not found" << std::endl;
        return -1;
    }

   threshold(img,binary,50,255,THRESH_TOZERO);  

   namedWindow("thresh");
   setMouseCallback( "thresh", onMouse, 0 );

   imshow("thresh",thresh);
}

void onMouse( int event, int x, int y, int, void* )
{
    if( event != CV_EVENT_LBUTTONDOWN )
            return;

    Point pt = Point(x,y);
    std::cout<<"x="<<pt.x<<"\t y="<<pt.y<<"\t value="<<thresh.at<uchar>(x,y)<<"\n";

}

I got the output as :-

screenshot

The coordinate values are printed but the pixel values are not printed properly. What is the mistake i committed??

Splay answered 17/2, 2013 at 9:56 Comment(0)
R
6

cout prints uchar's as characters, like the ones you see.

just wrap them with a cast to int for the printing:

cout << int( thresh.at<uchar>(y,x) )

also note, that it's at<uchar>(y,x), not x,y
Rosenkrantz answered 17/2, 2013 at 10:26 Comment(2)
Thank you @berak. another qn :in .at<uchar>(y,x) ,which one represents the row no and column no??Splay
at(row_no,column_no) 'basically: y = row_no, x = column_no'Rosenkrantz

© 2022 - 2024 — McMap. All rights reserved.