【发布时间】:2016-09-21 14:10:26
【问题描述】:
假设图像 A 和图像 B,其中 B 是 A 的修改副本,具有整体更高的 HSV 值和更低的饱和度。 如何使用 OpenCV 报告这些差异?
例如。输出:色调 0,饱和度 -25,HSV 值 +25。
我已经能够将 bgr-images 转换为 hsv-images 并将它们分成 3 个通道。 取两个图像的每个通道的平均值并输出这些平均值的差值是否是一个好/正确的主意?或者是否有更好的或已经包含在 opencv 中的方式? 谢谢!
【问题讨论】:
-
您不需要拆分...例如:
Mat3b diff; absdiff(A,B, diff); Scalar mean_diff = mean(diff);将分别为您提供 3 个通道的均值差异。 -
我不确定
absdiff是否正是这里应该使用的。通过这样做,您会失去差异的迹象。也许只写Mat diff = A - B;就足够了(如果您使用C++ 和CV_8U矩阵,您应该先将它们转换为CV_32F 才能存储负值) -
@Sunreed 你想要差异的平均值,你需要使用绝对值。否则,对于非常不同的图像,您可以获得 0 均值差。
-
谢谢!这似乎可以完成这项工作。如果您想将其写为答案,我可以接受。您是否知道一种方法来实现像@Sunreef(包括符号)这样的结果,但仍然具有相同的正确性?
-
标签: image opencv colors hsv bgr