- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在尝试使用直方图匹配从示例图像中找到匹配的图像。在大多数情况下,我的代码工作正常。使用的方法 Bhattacharyya 的范围是 0 <= method <= 1。通常使用 Bhattacharyya 方法,在匹配的情况下,输出结果将接近 0。但是我遇到了两个图像几乎相似的情况,尽管可能存在一些对比度差异。这就是为什么这个程序给出了更高的结果......
谁能帮我解释一下,为什么这种比较会产生如此大的值(value)?
int main(){
src_base = imread("images/src.jpg",-1);
src_test1 = imread("images/test.png",-1);
double base_test1 = hsvToHist(src_base, src_test1,3);
cout<< " Bhattacharyya template Base-Test(1) : "<< base_test1<<endl;
return 0;
}
double hsvToHist( Mat src_base, Mat src_test1, int method){
Mat hsv_base, hsv_test1;
cvtColor( src_base, hsv_base, COLOR_BGR2HSV );
cvtColor( src_test1, hsv_test1, COLOR_BGR2HSV );
/// initialization to calculate histograms (Using 50 bins for hue, 60 for saturation)
int h_bins = 50; int s_bins = 60;
int histSize[] = { h_bins, s_bins };
float h_ranges[] = { 0, 180 };
float s_ranges[] = { 0, 256 };
const float* ranges[] = { h_ranges, s_ranges };
int channels[] = { 0, 1 };
/// Histograms
Mat hist_base, hist_test1;
/// Calculate the histograms for the HSV images
calcHist( &hsv_base, 1, channels, Mat(), hist_base, 2, histSize, ranges, true, false );
normalize( hist_base, hist_base, 0, 1, NORM_MINMAX, -1, Mat() );
calcHist( &hsv_test1, 1, channels, Mat(), hist_test1, 2, histSize, ranges, true, false );
normalize( hist_test1, hist_test1, 0, 1, NORM_MINMAX, -1, Mat() );
///'3' for Bhattacharyya
double base_test1 = compareHist( hist_base, hist_test1, method );
return base_test1;
}
最佳答案
PNG 和 JPEG 图像将具有不同的直方图,即使它们看起来相同,因为 JPEG 是压缩的,这意味着信息已被删除并且直方图基本上已被过滤和平滑。此外,PNG 将具有比 JPEG 更大的值范围。使用不同的 bin 大小可能会获得更好的结果,但如果不进行测试就很难判断。
关于c++ - 'compareHist' 不适用于类似图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46563708/
我一直在尝试使用直方图匹配从示例图像中找到匹配的图像。在大多数情况下,我的代码工作正常。使用的方法 Bhattacharyya 的范围是 0 <= method <= 1。通常使用 Bhattacha
我正在尝试比较存储为数组的两个直方图。我不熟悉 C++ 接口(interface) (cv::Mat) 并在 OpenCV 中计算直方图。 我的代码: int testArr1[4] = {12, 1
img = cv2.imread('mandrill.png') histg = cv2.calcHist([img],[0],None,[256],[0,256]) if len (sys.argv
从两个 jpeg 文件中,我使用 PIL 创建了两个 np rgb 值数组,一个维度为 n x 3,另一个维度为 m x 3。问题是如何将这两个数组输入 cv2.compareHist(h1, h2,
我是一名优秀的程序员,十分优秀!