【问题标题】:How to determine similarity between two images using Imgproc.compareHist method of opencv in java?java - 如何在java中使用opencv的Imgproc.compareHist方法确定两个图像之间的相似度?
【发布时间】:2017-03-31 09:36:04
【问题描述】:

我在 java 中使用 opencv_249 dll。使用下面的代码比较两个图像矩阵。 代码抛出了一些我无法解决的异常。

static double compareImages(Mat main, Mat temp){
    main.convertTo(main, CvType.CV_32FC3);
    temp.convertTo(temp, CvType.CV_32FC3);
    Core.normalize(main, temp, 1.0, 0.0, Core.NORM_L1);
    double s=Imgproc.compareHist(main, temp, Imgproc.CV_COMP_CORREL);
    return s;
}

代码抛出以下异常:

OpenCV Error: Assertion failed (H1.type() == H2.type() && H1.type() == CV_32F) in cv::compareHist, 
file ..\..\..\..\opencv\modules\imgproc\src\histogram.cpp, 
line 1985 
Exception in thread "main" 
CvException [org.opencv.core.CvException: 
cv::Exception: ..\..\..\..\opencv\modules\imgproc\src\histogram.cpp:1985: 
error: (-215) H1.type() == H2.type() && H1.type() == CV_32F 
in function cv::compareHist ] 
at org.opencv.imgproc.Imgproc.compareHist_0(Native Method) 
at org.opencv.imgproc.Imgproc.compareHist(Imgproc.java:3051) 
at ImageComparator.main(ImageComparator.java:88)

谁能说出代码中遗漏了什么?

【问题讨论】:

  • 我不知道 java api,但我会尝试两件事:根据断言错误,似乎转换操作不成功,并且当您调用 compareHist 时,其中一种图像类型不再是 CV_32F,所以尝试使用新参考 'Mat convertMain = main.convertTo(main, CvType.CV_32FC3);'或者也许规范化线路搞砸了事情

标签: java opencv image-processing histogram image-comparison


【解决方案1】:

****OpenCV 错误:断言失败 (H1.type() == H2.type() && H1.type() == CV_32F) in...

因为错误消息告诉您断言失败。 两个输入图像必须是相同的类型,并且该类型必须是 CV_32F。

也许您注意到您的输入类型是 CV_32FC3?

【讨论】:

  • 我也尝试使用“CV_32F”类型,但仍然存在相同的错误。
  • @sharmishthakulkarni 好吧,如果断言失败,那么这些语句中至少有一个是错误的......在 convertTo 调用之后检查 main 和 temp 的类型。我不是 OpenCV 专家,但我看到的示例和常识告诉我,您不应该或不能就地转换类型。因此,请尝试创建新的 Mat 实例并将它们用作您的 convertTo 调用中的目的地。
猜你喜欢
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2023-04-03
  • 2011-05-09
  • 2020-01-14
  • 1970-01-01
相关资源
最近更新 更多