用代码举例,使用C++语言,构建一个简易的图像处理系统,实现图像文件读写、图像显示、统计量计算、直方图绘制、图像缩放、图像旋转、滤波等基础的图像处理功能。
时间: 2023-10-20 17:35:39 浏览: 133
C++基于 OpenCV+Qt 库实现的图像处理软件源代码+详细项目文档,可实现对图像的灰度化、二值化、均值滤波、边缘检测等处理
5星 · 资源好评率100%
好的,下面是一个使用OpenCV库实现的简易图像处理系统的示例代码,其中包括图像文件读写、图像显示、统计量计算、直方图绘制、图像缩放、图像旋转、滤波等基础的图像处理功能。
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
// 读取图像文件
Mat image = imread("test.jpg", IMREAD_COLOR);
// 显示图像
namedWindow("Image", WINDOW_NORMAL);
imshow("Image", image);
waitKey(0);
// 统计量计算
Scalar meanValue = mean(image);
Scalar stdValue = meanStdDev(image);
cout << "Mean value: " << meanValue << endl;
cout << "Std value: " << stdValue << endl;
// 直方图绘制
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
int histSize = 256;
float range[] = {0, 256};
const float* histRange = {range};
bool uniform = true, accumulate = false;
Mat hist;
calcHist(&grayImage, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);
int histHeight = 400;
int histWidth = 512;
int binWidth = cvRound((double)histWidth/histSize);
Mat histImage(histHeight, histWidth, CV_8UC3, Scalar(0,0,0));
normalize(hist, hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());
for(int i = 1; i < histSize; i++)
{
line(histImage, Point(binWidth*(i-1), histHeight-cvRound(hist.at<float>(i-1))),
Point(binWidth*(i), histHeight-cvRound(hist.at<float>(i))),
Scalar(255, 0, 0), 2, LINE_AA);
}
namedWindow("Histogram", WINDOW_NORMAL);
imshow("Histogram", histImage);
waitKey(0);
// 图像缩放
Mat resizedImage;
resize(image, resizedImage, Size(), 0.5, 0.5);
namedWindow("Resized Image", WINDOW_NORMAL);
imshow("Resized Image", resizedImage);
waitKey(0);
// 图像旋转
Mat rotatedImage;
Point2f center(image.cols/2.0, image.rows/2.0);
double angle = 45;
Mat rotMat = getRotationMatrix2D(center, angle, 1.0);
warpAffine(image, rotatedImage, rotMat, image.size());
namedWindow("Rotated Image", WINDOW_NORMAL);
imshow("Rotated Image", rotatedImage);
waitKey(0);
// 滤波
Mat blurredImage;
blur(image, blurredImage, Size(5,5));
namedWindow("Blurred Image", WINDOW_NORMAL);
imshow("Blurred Image", blurredImage);
waitKey(0);
return 0;
}
```
这段示例代码中,我们首先读取了一张名为“test.jpg”的图像文件,然后显示了该图像。接着,我们计算了该图像的平均值和标准差,并输出了结果。然后,我们将该图像转换为灰度图像,并计算了其直方图,并使用柱状图来展示。接下来,我们对该图像进行了缩放、旋转和滤波,并分别显示了处理后的图像。
阅读全文