初入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;
}
相关推荐
沃达德软件2 小时前
智慧警务图像融合大数据
大数据·图像处理·人工智能·目标检测·计算机视觉·目标跟踪
寻找华年的锦瑟6 小时前
Qt-视频九宫格布局
开发语言·qt
雨田哥6 小时前
Qt AFSim雷达探测显示
qt·afsim·qt雷达·qt仿真·雷达显控端·qt雷达模拟器
ghie90906 小时前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
努力的ping6 小时前
qt信号和槽
开发语言·qt
AGANCUDA6 小时前
qt中vtk显示pcl的点云类
开发语言·qt
老欧学视觉7 小时前
ubuntu20.04系统下安装SlowFast行为检测项目并跑通训练
python·深度学习·计算机视觉
xxp43219 小时前
Qt 网络编程 TCP通信
开发语言·qt
开始了码9 小时前
QT::鼠标事件简单介绍
qt