C++ 用C+绘制频率直方图+/OpenCV
创建一个频率数组C++ 用C+绘制频率直方图+/OpenCV,c++,arrays,opencv,histogram,C++,Arrays,Opencv,Histogram,创建一个频率数组 int arr[10]; arr[0] = 24; arr[1] = 28; arr[2] = 23; arr[3] = 29; //and so on 如何根据C++中的OpenCV在数组中绘制直方图? opencv不适合绘图。但是,对于简单的直方图,可以为每列绘制一个矩形(最终使用交替颜色) 代码如下: #include <opencv2\opencv.hpp> #include <algorithm> using namespace std; u
int arr[10];
arr[0] = 24;
arr[1] = 28;
arr[2] = 23;
arr[3] = 29;
//and so on
如何根据C++中的OpenCV在数组中绘制直方图? opencv不适合绘图。但是,对于简单的直方图,可以为每列绘制一个矩形(最终使用交替颜色) 代码如下:
#include <opencv2\opencv.hpp>
#include <algorithm>
using namespace std;
using namespace cv;
void drawHist(const vector<int>& data, Mat3b& dst, int binSize = 3, int height = 0)
{
int max_value = *max_element(data.begin(), data.end());
int rows = 0;
int cols = 0;
if (height == 0) {
rows = max_value + 10;
} else {
rows = max(max_value + 10, height);
}
cols = data.size() * binSize;
dst = Mat3b(rows, cols, Vec3b(0,0,0));
for (int i = 0; i < data.size(); ++i)
{
int h = rows - data[i];
rectangle(dst, Point(i*binSize, h), Point((i + 1)*binSize-1, rows), (i%2) ? Scalar(0, 100, 255) : Scalar(0, 0, 255), CV_FILLED);
}
}
int main()
{
vector<int> hist = { 10, 20, 12, 23, 25, 45, 6 };
Mat3b image;
drawHist(hist, image);
imshow("Histogram", image);
waitKey();
return 0;
}
更新 有关此绘图功能的更新版本,请参阅
#define N 3
int arr[N] = {4, 3, 9};
vector<int> hist(arr, arr + N);