【问题标题】:Is there something like MATLAB's colorbar for OpenCV?是否有类似 MATLAB 的 OpenCV 彩条之类的东西?
【发布时间】:2015-05-03 17:36:00
【问题描述】:

我正在使用 OpenCV 3.0 库编写 C++ 应用程序。我正在使用颜色图功能,但我想在图像窗口中添加一个颜色条(参见下面的 MATLAB 示例)。即使它在侧面/外部,这样用户也可以了解范围。有什么建议?提前致谢!

【问题讨论】:

  • 谢谢,这实际上是我开始的地方。不幸的是,他们没有提到如何生成颜色条,只提到如何制作情节。我正在尝试在上面示例图的右侧添加实际的“颜色条”,以显示颜色和值之间的关系。

标签: c++ matlab opencv


【解决方案1】:

See here the output

cv::Mat out;
color_map(input_image, out, cv::COLORMAP_JET);

//绘制彩色图的函数

void color_map(cv::Mat& input /*CV_32FC1*/, cv::Mat& dest, int color_map){

  int num_bar_w=30;
  int color_bar_w=10;
  int vline=10;

  cv::Mat win_mat(cv::Size(input.cols+num_bar_w+num_bar_w+vline, input.rows), CV_8UC3, cv::Scalar(255,255,255));

  //Input image to
  double Min, Max;
  cv::minMaxLoc(input, &Min, &Max);
  int max_int=ceil(Max);

  std::cout<<" Min "<< Min<<" Max "<< Max<<std::endl;

  input.convertTo(input,CV_8UC3,255.0/(Max-Min),-255.0*Min/(Max-Min));
  input.convertTo(input, CV_8UC3);

  cv::Mat M;
  cv::applyColorMap(input, M, color_map);

  M.copyTo(win_mat(cv::Rect(  0, 0, input.cols, input.rows)));

  //Scale
  cv::Mat num_window(cv::Size(num_bar_w, input.rows), CV_8UC3, cv::Scalar(255,255,255));
  for(int i=0; i<=max_int; i++){
      int j=i*input.rows/max_int;
      cv::putText(num_window, std::to_string(i), cv::Point(5, num_window.rows-j-5),cv::FONT_HERSHEY_SIMPLEX, 0.6 , cv::Scalar(0,0,0), 1 , 2 , false);
  }

  //color bar
  cv::Mat color_bar(cv::Size(color_bar_w, input.rows), CV_8UC3, cv::Scalar(255,255,255));
  cv::Mat cb;
  for(int i=0; i<color_bar.rows; i++){
    for(int j=0; j<color_bar_w; j++){
      int v=255-255*i/color_bar.rows;
      color_bar.at<cv::Vec3b>(i,j)=cv::Vec3b(v,v,v);
    }
  }

  color_bar.convertTo(color_bar, CV_8UC3);
  cv::applyColorMap(color_bar, cb, color_map);
  num_window.copyTo(win_mat(cv::Rect(input.cols+vline+color_bar_w, 0, num_bar_w, input.rows)));
  cb.copyTo(win_mat(cv::Rect(input.cols+vline, 0, color_bar_w, input.rows)));
  dest=win_mat.clone();
}

【讨论】:

    【解决方案2】:

    如果您只想单独绘制右侧的条,这可能适合您:

    /*Aim:- Generate a 20x255 colorbar starting at point (200,50)*/
    int b=0,g=255,r=255;//start at yellow
    int y=50;//start at y=50, then increment
    while(g>0)//run till green color reaches 0
    {
      b++;
      g--;
      r--;//gradually convert yellow to blue
      y++;
      Scalar color=Scalar(b,g,r);
      rectangle(img,Point(200,y),Point(220,y+1),color,1);
    }
    

    如果这给出了预期的结果,请告诉我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      相关资源
      最近更新 更多