初入OpenCV

OpenCV简介

OpenCV是一个开源的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法。

应用场景:

目标识别:人脸、车辆、车牌、动物;

自动驾驶;医学影像分析;

视频内容理解分析:文字识别、公众人物识别、识别各类物品

OpenCV图像模式

位图模式

位图模式就是1位二进制深度的图像模式,只有黑白两种颜色。它可以由扫描或置入黑色的矢量线条图像生成,也只能由灰度模式转换而来。

灰度模式

灰度模式是8位二进制深度的图像模式,在全黑和全白间插有254个灰度等级的颜色来描绘灰度模式的图像,所有模式的图像都能转换成灰度模式。

RGB模式

简而言之就是彩色。

新建项目

进入Qt新建一个项目,打开.pro文件,添加以下代码

cpp 复制代码
INCLUDEPATH +=/usr/local/include/
LIBS+=/usr/local/lib/libopencv_world.so

引入头文件和域

cpp 复制代码
#include <opencv2/opencv.hpp>
using namespace cv;

加载图像

示例

我们来使用OpenCV来实现加载一张图片

cpp 复制代码
    Mat img=imread("image/dog.jpg");
    imshow("img",img); // 显示图片
    waitKey(0); // 等待用户操作

Mat类似于一个图片信息的类。

imread("path")读取图片信息,path为路径。

imshow()显示图片。

waitKey(0)类似于一个死循环等待用户操作,如果我们写waitKey(1000)就等待1s就消失,当然waitKey的话只要接收到键盘输入值就消失。

结果

处理图像像素点

示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat image_process(Mat &img){
   int row=img.rows; // 获取行
   int col=img.cols * img.channels(); // 获取列

   // 改变图片像素点
   for(int i=0;i<row;i++){
       // 获取第i行地址
       uchar* data=img.ptr<uchar>(i);
       for(int j=0;j<col;j++){
           /*int q=rand()%col;
           data[q]=155;*/
           data[j]-=70;
       }
   }
   return img;
}

int main()
{
    // 读取图片信息
    // Mat:图片信息的类
    Mat img=imread("image/dog.jpg",IMREAD_GRAYSCALE);
    image_process(img);
    imshow("img",img);
    while(1){
        int key=waitKey(0); // 等待用户操作
        if(key==10)
            break;
    }
    return 0;
}

结果

简易毛玻璃特效

示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

// 毛玻璃特效
Mat img_glass(Mat &img)
{
    RNG rng;
    int random=0;
    for(int i=0;i<img.rows;i++)
    {
        for(int j=0;j<img.cols-5;j++)
        {
            random=rng.uniform(0,5);
            // at<>访问Mat数据域(BGR)
            img.at<Vec3b>(i,j)[0]=img.at<Vec3b>(i+random,j+random)[0]; // B
            img.at<Vec3b>(i,j)[1]=img.at<Vec3b>(i+random,j+random)[1]; // G
            img.at<Vec3b>(i,j)[2]=img.at<Vec3b>(i+random,j+random)[2]; // R
        }
    }
    return img;
}

int main()
{
    // 读取图片信息
    // Mat:图片信息的类
    Mat img=imread("image/dog.jpg");
    img_glass(img);
    imshow("img",img);
    while(1){
        int key=waitKey(0); // 等待用户操作
        if(key==10)
            break;
    }
    return 0;
}

结果

读取视频

示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
    Mat frame;
    VideoCapture cap("video/carMove.mp4");
    while(cap.read(frame))
    {
        imshow("video",frame);
        waitKey(40);
    }

    return 0;
}
相关推荐
格林威18 分钟前
机器视觉检测的光源基础知识及光源选型
人工智能·深度学习·数码相机·yolo·计算机视觉·视觉检测
鹅毛在路上了1 小时前
C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览
c++·opencv·ffmpeg
研梦非凡3 小时前
CVPR 2025|基于视觉语言模型的零样本3D视觉定位
人工智能·深度学习·计算机视觉·3d·ai·语言模型·自然语言处理
Monkey的自我迭代3 小时前
多目标轮廓匹配
人工智能·opencv·计算机视觉
索迪迈科技5 小时前
安防芯片 ISP 的白平衡统计数据对图像质量有哪些影响?
人工智能·计算机视觉·白平衡
ViperL16 小时前
[优化算法]神经网络结构搜索(一)
深度学习·神经网络·计算机视觉
张子夜 iiii7 小时前
实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
人工智能·pytorch·python·opencv·计算机视觉
牵牛老人7 小时前
Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题之一
数据库·c++·qt
ChindongX8 小时前
CString(MFC/ATL 框架)和 QString(Qt 框架)
qt·mfc
清朝牢弟9 小时前
Win系统下配置PCL库第一步之下载Visual Studio和Qt 5.15.2(超详细)
c++·qt·visual studio