C和opencv实现图像显示图像的紫色的直方图,使用IplImage
时间: 2023-05-30 17:05:18 浏览: 80
下面是一个简单的示例代码,可以实现C和OpenCV中图像的紫色直方图:
```
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
IplImage* image = cvLoadImage("input.jpg", CV_LOAD_IMAGE_COLOR);
// 创建一个灰度图像
IplImage* grayImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvCvtColor(image, grayImage, CV_BGR2GRAY);
// 创建一个紫色通道图像
IplImage* purpleImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
cvSplit(image, 0, 0, purpleImage, 0);
// 创建一个紫色直方图
int nHistSize = 256;
float range[] = { 0, 256 };
float* pRanges[] = { range };
CvHistogram* hist = cvCreateHist(1, &nHistSize, CV_HIST_ARRAY, pRanges, 1);
// 计算直方图
cvCalcHist(&purpleImage, hist, 0, 0);
// 创建一个图像窗口
cvNamedWindow("Histogram", CV_WINDOW_NORMAL);
// 绘制直方图
int width = 512, height = 400;
IplImage* histImage = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
cvZero(histImage);
cvNormalizeHist(hist, 1.0);
for (int i = 0; i < nHistSize; i++)
{
float binValue = cvGetReal1D(hist->bins, i);
int intensity = cvRound(binValue * height);
cvRectangle(histImage, cvPoint(i * 2, height), cvPoint((i + 1) * 2 - 1, height - intensity), CV_RGB(255, 0, 255), -1);
}
// 显示图像
cvShowImage("Histogram", histImage);
// 等待按键
cvWaitKey(0);
// 释放内存
cvReleaseImage(&image);
cvReleaseImage(&grayImage);
cvReleaseImage(&purpleImage);
cvReleaseImage(&histImage);
cvDestroyAllWindows();
return 0;
}
```
以上代码通过使用cvSplit将原始图像分离出紫色通道,并使用cvCalcHist计算紫色通道的直方图,最后使用cvRectangle绘制直方图。您可以根据需要更改直方图的大小和颜色。
阅读全文