用完整代码举例,使用C++语言,构建一个简易的图像处理系统,实现图像文件读写、图像显示
时间: 2024-03-27 11:39:08 浏览: 86
好的,以下是一个完整的图像处理系统的C++代码实现。由于篇幅限制,只展示核心代码。
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
string imagePath = "lena.jpg";
// 读取图像文件
Mat img = imread(imagePath, IMREAD_GRAYSCALE);
if (img.empty()) {
cout << "Could not read the image: " << imagePath << endl;
return 1;
}
// 显示图像
namedWindow("Image", WINDOW_NORMAL);
imshow("Image", img);
waitKey(0);
return 0;
}
```
以上代码使用了OpenCV库进行图像处理。其中,`imread`函数实现了图像文件的读取,`namedWindow`函数创建了一个窗口,`imshow`函数将图像显示在窗口中,`waitKey`函数等待用户按下按键。在`main`函数中,我们可以看到如何调用这些函数实现图像处理的功能。此代码仅实现了图像文件读取和显示两个功能,更多的图像处理功能可以通过类似的方式实现。
相关问题
用代码举例,使用C++语言,构建一个简易的图像处理系统,实现图像文件读写、图像显示、统计量计算、直方图绘制、图像缩放、图像旋转、滤波等基础的图像处理功能。
好的,下面是一个使用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”的图像文件,然后显示了该图像。接着,我们计算了该图像的平均值和标准差,并输出了结果。然后,我们将该图像转换为灰度图像,并计算了其直方图,并使用柱状图来展示。接下来,我们对该图像进行了缩放、旋转和滤波,并分别显示了处理后的图像。
阅读全文