小编Zyp*_*987的帖子

opencv绘制2d直方图

我想知道如何在opencv c ++中绘制HSV Mat的二维直方图.我当前试图显示它的代码失败了.我已经四处查看如何绘制直方图,我发现的所有直方图都是将它们绘制为独立的1d直方图.

这是我当前的输出,色调分箱数为30,饱和分箱数为32:

这是另一个输出,其中色调分箱数为7,饱和分箱数为5:

我希望它看起来更像是这里的结果

http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html

我也注意到每当我做cout << Hist.size它给我50x50.我理解这只是意味着数组的第一个维度是250的大小?

另外,如何将直方图从最高到最低(或反之亦然)值频率排序?这是我想要解决的另一个问题.

我目前的功能如下.

void Perform_Hist(Mat& MeanShift, Mat& Pyramid_Result, Mat& BackProj){  

  Mat HSV, Hist;

  int histSize[] = {hbins, sbins};
  int channels[] = {0, 1};

  float hranges[] = {0, 180};
  float sranges[] = {0, 256};

  const float* ranges[] = {hranges, sranges};

  cvtColor(MeanShift, HSV, CV_BGR2HSV);

  Mat PyrGray = Pyramid_Result.clone();

  calcHist(&HSV, 1, channels, Mat(), Hist, 2, histSize, ranges, true, false); 
  normalize(Hist, Hist, 0, 255, NORM_MINMAX, -1, Mat());  
  invert(Hist, Hist, 1);  
  calcBackProject(&PyrGray, 1, channels, Hist, …
Run Code Online (Sandbox Code Playgroud)

opencv image-processing histogram

2
推荐指数
1
解决办法
3889
查看次数

opencv java修改像素值

我一直在尝试在 opencv java 中转换一些 opencv C++ 代码,但似乎无法让像素分割正常工作。我拿了一个 meanshiftsegmented mat,然后转换为灰度,然后转换为 32F。

然后我将最下采样然后上采样的图像(由灰色均值偏移垫组成)与原始灰色均值偏移垫进行比较。

我已经阅读了Using get() and put() to access pixel values in OpenCV for Java

但是,它和其他类似的东西不起作用。我收到的错误消息是无效的垫子类型 5。但是,即使我能够看到显着图,我也肯定这是错误的。这是因为当我在 C++ 中传入图像 001.jpg 时,我应该看到原始图像 + 对象周围的红色方块。在java中,我只看到最后的原始图像。

笔记 :

AbstractImageProvider.deepCopy(AbstractImageProvider.matToBufferedImage(Saliency),disp);

是一个 API 调用,当我尝试显示原始垫、meanShift 垫和灰色 meanShift 垫时有效。它无法显示显着性。

C++

我只做了一个通道拆分,因为我正在测试其他颜色空间,但是在 java 中我只想使用灰度。

  input = MeanShift.clone();
  input.convertTo(input, CV_32F);

  for(int i = 0; i < Pyramid_Size; i++){DS_Pyramid[i] = input.clone();}

  for (int i = 0; i < Pyramid_Size; i++){ 
    for (int k = 0; k <= i; k++){ // Why …
Run Code Online (Sandbox Code Playgroud)

java opencv image-processing

1
推荐指数
1
解决办法
5271
查看次数

标签 统计

image-processing ×2

opencv ×2

histogram ×1

java ×1