🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

C++ OpenCV 基础操作指南

一、环境配置

二、基础图像操作

1. 图像读取

2. 图像显示

3. 图像颜色转换

三、视频处理

1. 从文件读取视频

2. 读取摄像头

四、基础图像处理

1. 图像调整大小

2. 图像裁剪

五、完整示例代码

六、关键点总结

七、常见问题解决


C++ OpenCV 基础操作指南

一、环境配置

在使用OpenCV进行C++开发前,需要完成以下步骤:

  1. 下载并安装OpenCV库(推荐3.4.6版本)
  2. 配置IDE(如Visual Studio)的包含路径和库路径
  3. 确保编译器能够找到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;
}

六、关键点总结

  1. 图像数据结构:OpenCV使用Mat类存储图像数据
  2. 颜色顺序:默认BGR(蓝-绿-红),非RGB
  3. 图像处理流程
    • 读取图像 → 处理图像 → 显示结果
  4. 窗口管理imshow显示图像,waitKey控制显示时间,destroyAllWindows关闭窗口
  5. 视频处理VideoCapture类用于视频捕获,read方法逐帧读取

七、常见问题解决

  • 图像无法显示:确保waitKey函数在imshow后调用
  • 图像路径错误:检查图片路径是否正确,建议使用相对路径
  • 颜色转换问题:注意OpenCV的BGR顺序,处理RGB图像时需转换

以上是C++ OpenCV的基础操作指南,掌握了这些基础操作,您就可以进行更复杂的图像处理和计算机视觉应用开发了。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐