对一个数组,将其中的元素值画出来
/*
* 画数组直方图,画在一个Mat上
*/
void show_lzb(int arr[], int size, string title)
{
Mat drawImage = Mat::zeros(Size(256, 256), CV_8UC3);
int _max = 0;
for (int i = 0; i < size; i++)
{
if (arr[i] > _max)
{
_max = arr[i];//找到数组中的最大值,后面需要归一化
}
}
for (int i = 0; i < 256; i++)
{
int current_value = (int)(double(arr[i]) / double(_max) * 256);//每次都要将数组的值根据最大值归一化到0-255之间
line(drawImage, Point(i, drawImage.rows - 1), Point(i, drawImage.rows - 1 - current_value), Scalar(255, 0, 255));
}
imshow(title, drawImage);
}
测试一下
int main()
{
int array_lzb[256] = { 0 };
int N = sizeof(array_lzb) / sizeof(array_lzb[0]);
for (int i = 0; i < N; i++)
{
array_lzb[i] = i * i;//画出来应该是y=x^2的曲线
}
show_lzb(array_lzb, N, "show_lzb");
waitKey(0);
return 0;
}
比如下面是一个图像的直方图结果