HoRain云--C++ OpenCV入门指南:基础操作全解析
本文提供了C++ OpenCV基础操作指南,涵盖环境配置、图像处理、视频操作等核心内容。详细介绍了图像读取/显示/颜色转换、视频文件/摄像头捕获、图像大小调整/裁剪等基础操作,并附完整示例代码。关键点包括Mat数据结构、BGR颜色顺序、处理流程和窗口管理。同时总结了常见问题解决方法,为计算机视觉开发打下基础。适合OpenCV初学者快速掌握基本图像处理技术。
·

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录

C++ OpenCV 基础操作指南
一、环境配置
在使用OpenCV进行C++开发前,需要完成以下步骤:
- 下载并安装OpenCV库(推荐3.4.6版本)
- 配置IDE(如Visual Studio)的包含路径和库路径
- 确保编译器能够找到OpenCV头文件和库文件
二、基础图像操作
1. 图像读取
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
string path = "Resources/test.png";
Mat img = imread(path); // 从文件加载图像
// 检查图像是否加载成功
if (img.empty()) {
cout << "Error: Image not found." << endl;
return -1;
}
return 0;
}
说明:
cv::imread函数从指定文件加载图像- 默认以BGR(蓝-绿-红)顺序存储彩色图像通道
- 若无法读取图像,将返回空矩阵(
Mat::data == NULL) - 可指定标志参数:
IMREAD_COLOR(默认,彩色)、IMREAD_GRAYSCALE(灰度)、IMREAD_UNCHANGED(保留透明通道)
2. 图像显示
// 显示图像
imshow("Image", img); // 在指定窗口显示图像
// 等待按键事件(0表示无限等待,直到按键)
waitKey(0);
说明:
cv::imshow用于在指定窗口显示图像- 必须配合
cv::waitKey函数使用,否则图像不会显示 waitKey(0):无限等待按键,直到有按键事件发生waitKey(25):显示25毫秒后自动关闭窗口
3. 图像颜色转换
// 将彩色图像转换为灰度图像
Mat grayImage;
cvtColor(img, grayImage, COLOR_BGR2GRAY);
// 显示转换后的图像
imshow("Gray Image", grayImage);
waitKey(0);
说明:
- OpenCV默认使用BGR顺序,而非RGB
cvtColor函数用于颜色空间转换- 常用转换:
COLOR_BGR2GRAY(BGR转灰度)、COLOR_GRAY2BGR(灰度转BGR)
三、视频处理
1. 从文件读取视频
// 创建VideoCapture对象
VideoCapture cap("video.mp4");
// 检查视频是否打开
if (!cap.isOpened()) {
cout << "Error opening video file" << endl;
return -1;
}
Mat frame;
// 逐帧读取视频
while (true) {
cap >> frame; // 读取下一帧
// 检查是否读取到帧
if (frame.empty())
break;
// 显示当前帧
imshow("Video", frame);
// 按'q'键退出
if (waitKey(25) == 'q')
break;
}
cap.release(); // 释放视频捕获对象
destroyAllWindows(); // 关闭所有窗口
2. 读取摄像头
VideoCapture cap(0); // 0表示默认摄像头
if (!cap.isOpened()) {
cout << "Error opening camera" << endl;
return -1;
}
Mat frame;
while (true) {
cap >> frame;
imshow("Camera", frame);
if (waitKey(25) == 'q')
break;
}
cap.release();
destroyAllWindows();
四、基础图像处理
1. 图像调整大小
// 调整图像大小
double scaleFactor = 0.75;
Size newSize(frame.cols * scaleFactor, frame.rows * scaleFactor);
Mat resizedFrame;
resize(frame, resizedFrame, newSize);
imshow("Resized Image", resizedFrame);
waitKey(0);
2. 图像裁剪
// 裁剪图像(从(100,100)开始,宽200,高150)
Rect roi(100, 100, 200, 150);
Mat cropped = frame(roi);
imshow("Cropped Image", cropped);
waitKey(0);
五、完整示例代码
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 1. 读取图像
string imagePath = "Resources/test.png";
Mat img = imread(imagePath);
if (img.empty()) {
cout << "Error: Image not found." << endl;
return -1;
}
// 2. 显示原始图像
imshow("Original Image", img);
waitKey(0);
// 3. 转换为灰度图像
Mat grayImage;
cvtColor(img, grayImage, COLOR_BGR2GRAY);
// 4. 显示灰度图像
imshow("Gray Image", grayImage);
waitKey(0);
// 5. 调整图像大小
double scaleFactor = 0.5;
Size newSize(img.cols * scaleFactor, img.rows * scaleFactor);
Mat resizedImg;
resize(img, resizedImg, newSize);
// 6. 显示调整后的图像
imshow("Resized Image", resizedImg);
waitKey(0);
// 7. 裁剪图像
Rect roi(50, 50, 200, 200);
Mat cropped = img(roi);
// 8. 显示裁剪后的图像
imshow("Cropped Image", cropped);
waitKey(0);
return 0;
}
六、关键点总结
- 图像数据结构:OpenCV使用
Mat类存储图像数据 - 颜色顺序:默认BGR(蓝-绿-红),非RGB
- 图像处理流程:
- 读取图像 → 处理图像 → 显示结果
- 窗口管理:
imshow显示图像,waitKey控制显示时间,destroyAllWindows关闭窗口 - 视频处理:
VideoCapture类用于视频捕获,read方法逐帧读取
七、常见问题解决
- 图像无法显示:确保
waitKey函数在imshow后调用 - 图像路径错误:检查图片路径是否正确,建议使用相对路径
- 颜色转换问题:注意OpenCV的BGR顺序,处理RGB图像时需转换
以上是C++ OpenCV的基础操作指南,掌握了这些基础操作,您就可以进行更复杂的图像处理和计算机视觉应用开发了。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐


所有评论(0)