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??

1 Answer 1

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
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you @berak. another qn :in .at<uchar>(y,x) ,which one represents the row no and column no??
at(row_no,column_no) 'basically: y = row_no, x = column_no'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.