Предварительный просмотр значения пикселя для изображения с плавающей точкой - PullRequest
0 голосов
/ 24 мая 2018

Скажем, у меня есть изображение с плавающей точкой, например, в формате 32FC1 для теплового изображения, и я хочу отобразить его с помощью (предпочтительно) инструментов ROS или openCV, а также могу видеть текущее значение пикселя (например, температуру).мышь нависаетКак бы я это сделал?Rviz может отображать изображение, но не будет отображать значения пикселей.Image_view также может отображать изображение, но покажет значение пикселя в RGB.

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2018
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using std::cout;
using std::endl;

// create a global Mat
cv::Mat img_32FC1;

// function to be called on mouse event
// displays values on console, it can be modified to print values on image
void mouseEventCallBack (int event, int x, int y, int flags, void *userdata)
{
  if(event == cv::EVENT_MOUSEMOVE)
  {
    cout<<"x = "<<x<<", y = "<<y<<" value = "<<img_32FC1.at<float>(y,x)<<endl;
  }
}

int main()
{
  // original color image, CV_8UC3
  cv::Mat img_8UC3 = cv::imread("image.jpg",cv::IMREAD_UNCHANGED), img_8UC1;

  // convert original image to gray, CV_8UC1
  cv::cvtColor(img_8UC3, img_8UC1, cv::COLOR_BGR2GRAY);

  // convert to float, CV_32FC1
  img_8UC1.convertTo(img_32FC1, CV_32FC1);
  img_32FC1 /= 255.0;

  // create a window
  cv::namedWindow("window",CV_WINDOW_AUTOSIZE);

  // set MouseCallback function
  cv::setMouseCallback("window", mouseEventCallBack);

  // Display image
  cv::imshow("window", img_8UC1);
  cv::waitKey(0);
  cv::destroyAllWindows();
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...