- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图了解 cvCalcHist
之间的区别,openCV c 版本
和 calcHist
中计算图像直方图的方法>,openCV c++ version
中计算图像直方图的方法。
openCV c版本代码:
// load the color image
IplImage* im = cvLoadImage("2.png");
// get the color histogram
IplImage* im32f = cvCreateImage(cvGetSize(im), IPL_DEPTH_32F, 3);
cvConvertScale(im, im32f);
int histSize[] = {32, 32, 32};
float rgbRange[] = {0, 256};
float* ranges[] = {rgbRange, rgbRange, rgbRange};
CvHistogram* hist = cvCreateHist(3, histSize, CV_HIST_ARRAY, ranges);
IplImage* b = cvCreateImage(cvGetSize(im32f), IPL_DEPTH_32F, 1);
IplImage* g = cvCreateImage(cvGetSize(im32f), IPL_DEPTH_32F, 1);
IplImage* r = cvCreateImage(cvGetSize(im32f), IPL_DEPTH_32F, 1);
cvSplit(im32f, b, g, r, NULL);
IplImage* planes[] = {b, g, r};
cvCalcHist(planes, hist);
// find min and max values of histogram bins
float minval, maxval;
cvGetMinMaxHistValue(hist, &minval, &maxval);
cout << "Min : " << minval << " / Max : " << maxval << endl;
//OUTPUT: Min : 0 / Max : 177617
openCV c++版本代码:
const int channels[] = {0, 1, 2};
const int histSize[] = {32, 32, 32};
const float rgbRange[] = {0, 256};
const float* ranges[] = {rgbRange, rgbRange, rgbRange};
Mat im = imread("2.png",IMREAD_COLOR);
MatND hist;
Mat im32fc3, backpr32f(im.cols, im.rows, CV_32F), backpr8u(im.cols, im.rows, CV_8U), backprBw;
im.convertTo(im32fc3, CV_32F);
// compute histogram, scale it to 0-255 range and backproject
calcHist( &im32fc3, 1, channels, Mat(), hist, 1, histSize, ranges, true, false);
// find min and max values of histogram bins
double minval, maxval;
cv::minMaxIdx(hist, &minval, &maxval);
cout << "Min : " << minval << " / Max : " << maxval << endl;
//OUTPUT: Min : 455 / Max : 476732
正如您在上面代码部分的 //OUTPUT
注释中看到的,两段代码的值不同,我认为我应该得到相同的结果。知道发生了什么事吗?
最佳答案
由于您在 B、G、R 中创建 3D 直方图,您需要告诉 calcHist
正确的维数:3。所以基本上您需要更改:
calcHist( &im32fc3, 1, channels, Mat(), hist, 1, histSize, ranges, true, false);
// ^
// one dimension
为此具有正确的维度数:
calcHist( &im32fc3, 1, channels, Mat(), hist, 3, histSize, ranges, true, false);
// ^
// three dimensions
关于c++ - cvCalcHist 和 calcHist 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951334/
我有这样的事情: import numpy as np import cv2 as cv from matplotlib import pyplot as plt import numpy.polyn
我正在使用 calcHist 函数计算图像的颜色直方图。我正在开发一个简单的图像匹配应用程序,我正在尝试使用颜色直方图作为图像描述符来查找相似图像。 这是定义: void calcHist(const
尝试使用带掩码的 calcHist 时出现此错误:error: (-215) mask.size() == imsize && mask.channels() == 1 in function his
我正在努力学习equalization of histograms , 我当然知道有 histogram equalization in OpenCV .我是iterating over the Ma
我正在尝试使用 OpenCV 的 Emgu C# 包装器为图像的反向投影创建直方图。我有以下 OpenCV C++ 代码,我正在尝试将其转换为 Emgu C#: char* filename = (c
我有这段代码用于计算和绘制图像的直方图。 colors = ('b', 'g', 'r') for i, col in enumerate(colors): hist = cv2.calcHi
在尝试使用 cv2.calcHist() 时,我遇到了以下不明确的错误 >>> img array([ 1., 2., 3., 4., 5.]) >>> cv2.calcHist( [img]
我试图了解 cvCalcHist 之间的区别,openCV c 版本 和 calcHist 中计算图像直方图的方法>,openCV c++ version 中计算图像直方图的方法。 openCV c版
我试图从 OpenCV 中的彩色(3 channel )图像中获取直方图,但每次我都像这样执行 calcHist 直方图: //int histSize[3]; //float hranges[2];
我已经多次阅读 calcHist() 的文档,但我认为我对 OpenCV 的缺乏经验和生疏的编程技能完全使我无法理解它。 我正在计算 HSV 图像(Hue 或 channel [0])的一个 chan
我想做的是编写一个函数来计算灰度图像的直方图,其中转发的 Bins 数 (anzBin) 直方图范围被划分为。然后我运行图像像素以匹配它们将值分配给不同的 Bins,如果某个值适合,则将 Bin 的值
我正在尝试让一些 C++ 代码在我的 Android 设备上运行;但是,我遇到了 Mat 类型的一个小问题。我在用着。我尝试转换的代码如下(第二个函数调用第一个): static Mat histc_
我在“OpenCV 2 计算机视觉应用程序编程手册”一书第 4 章中运行一个示例。calcHist 返回的只有 2 个直方图是黑色的,并且遵循源代码。运行结果如下图。 ColorHistogram()
我正在使用上面的代码从灰度图像计算直方图;它工作正常。 cv::Mat imgSrc = cv::imread("Image.jpg", cv::IMREAD_UNCHANGED); cv::Mat
我正在尝试计算仅由一行组成的矩阵的直方图。我使用 OpenCV3.1 在 VS2015 中编写了这段代码: //Create matrix stromal pop cv::Mat stromalHis
我想计算图像的颜色直方图,但只考虑特定像素(我知道其二维坐标)。 是否可以使用 calcHist 指定仅应考虑这些具体像素(而不是整个 cv::Mat 和其中的所有像素)?如果没有,是否可以创建一个新
我是计算机视觉的新手,这是我的第一份作业。我正在尝试创建与文件夹中的每个图像相对应的 rgb 直方图。假设我在 test 文件夹(位于我当前的工作目录中)中有 10 张图片。我想为每个图像创建 10
我有计算 hsv 和 yuv 图像直方图的代码。由于我试图单独获取与亮度对应的值,因此我想要来自 hsv 图像的“v” channel 值和来自 yuv 图像的亮度(“y”) channel 值。这是
这里有很多关于 OpenCV 中的 calcHist 的问题,但我找不到我的问题的答案,并且已经多次阅读文档,所以希望有人可以通过以下代码发现我的问题: //the setup is that I'v
我正在尝试使用以下代码: cv::MatND hist; cv::Mat image = cv::imread("image.bmp"); float *range = new
我是一名优秀的程序员,十分优秀!