注:以下是根据链接https://blog.csdn.net/Cream_Cicilian/article/details/105427752 的小白学习过程。
1加载、修改、保存图像
1.1加载图像
1.1.1加载图像cv::imread
用于从文件中读取图像数据并将其存储到一个 cv::Mat 对象中,其中第一个参数表示图像文件名称
第二个参数,表示加载的图像是什么类型
以下是三个参数值展示效果
(1)当使用 IMREAD_UNCHANGED 时
IMREAD_UNCHANGED (<0) 表示加载原图,不做任何改变
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
cv::Mat image = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_UNCHANGED);
//Mat src = imread("D:\\vscodestore\\zxc.jpg");
if (image.empty()) {
printf("could not find the image!\n");
return -1;
}
imshow("ImputImage", image);
waitKey(0);
system("path");
getchar();
return 0;
}
(2)当使用IMREAD_GRAYSCALE 时
IMREAD_GRAYSCALE ( 0)表示把原图作为灰度图像加载进来
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
cv::Mat grayImage = cv::imread("D:\\vscodestore\\cartoon.jpg", cv::IMREAD_GRAYSCALE);
if (grayImage.empty()) {
printf("could not find the image!\n");
return -1;
}
imshow("ImputImage", grayImage);
waitKey(0);
system("path");
getchar();
return 0;
}
用人像实验灰度图像有点怪,这里用卡通人物纪念童年
(3)当使用IMREAD_COLOR时
IMREAD_COLOR (>0) 表示把原图作为RGB图像加载进来
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
cv::Mat rbgImage = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_COLOR);
if (rbgImage.empty()) {
printf("could not find the image!\n");
return -1;
}
imshow("ImputImage", rbgImage);
waitKey(0);
system("path");
getchar();
return 0;
}
使用 IMREAD_COLOR 和 IMREAD_UNCHANGED 的主要区别在于理论上的处理意图——前者明确要求以彩色无透明度信息的方式读取,后者理论上想要保持所有可能的原始信息,但在 JPG 的实际应用场景中这一点并不适用,因为 JPG 不携带 alpha 通道信息。因此,在 JPG 图像的上下文中,这两个模式的实际效果是等价的。
1.1.2显示图像(cv::namedWindos 与cv::imshow)
namedWindow 是 OpenCV 库中的一个函数,用于创建一个窗口并为其指定一个名称。使用 namedWindow 创建窗口后,可以在这个窗口中显示图像,进行交互,比如调整窗口大小、移动窗口位置等。
imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象
以下是参数值展示效果:
- WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
- WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小。
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
cv::Mat rbgImage = cv::imread("D:\\vscodestore\\zxc.jpg", cv::IMREAD_COLOR);
if (rbgImage.empty()) {
printf("could not find the image!\n");
return -1;
}
namedWindow("exampleWindow", WINDOW_NORMAL);
imshow("exampleWindow", rbgImage);
waitKey(0);
destroyAllWindows();
return 0;
}
你会发现图片小了好多,本来还在想怎么输入代码调整窗口大小,后来搜索发现就是在显示的图片窗口简单粗暴的拉动窗口