基于Qt复现opencv的基础案例

一.        .pro文件

INCLUDEPATH += D:\OpenCV\opencv\build_opencv\install\include
LIBS += D:\OpenCV\opencv\build_opencv\install\x64\mingw\bin\libopencv_*.dll

二.函数实现

1.毛玻璃

main.cpp

#include <opencv2/opencv.hpp> // 引入OpenCV库的头文件,这是使用OpenCV的基础。  
  
using namespace cv; // 使用OpenCV的命名空间,这样可以直接使用OpenCV的函数和类,而不需要前缀"cv::"。  
  
/*毛玻璃效果*/  
Mat imgeGalss(Mat &img) // 定义一个函数imgeGalss,它接受一个Mat类型的引用作为参数(这意味着它会直接修改传入的图像)。  
{  
    RNG rng; // 创建一个随机数生成器对象rng。  
    int random = 0; // 定义一个整数变量random,用于存储生成的随机数,但在这里初始化为0,稍后会被覆盖。  
    int num = 5; // 定义一个整数变量num,表示我们想要跳过的像素数(在毛玻璃效果中)。  
  
    // 使用两个嵌套的for循环遍历图像的每个像素(但跳过边界num个像素)。  
    for(int i=0;i<img.rows - num;i++) // 遍历图像的每一行(除了最后num行)。  
    {  
        for(int j=0;j<img.cols - num;j++) // 遍历图像的每一列(除了最后num列)。  
        {  
            random = rng.uniform(0,num); // 生成一个[0, num)范围内的随机整数。  
  
            // 使用随机生成的偏移量从原始图像中获取一个像素,并将该像素的颜色值赋给当前像素。  
            // 这会导致一种类似于毛玻璃的效果,因为某些像素的颜色会被附近的随机像素的颜色所替代。  
            img.at<Vec3b>(i,j)[0]=img.at<Vec3b>(i+random,j+random)[0]; // 替换蓝色通道。  
            img.at<Vec3b>(i,j)[1]=img.at<Vec3b>(i+random,j+random)[1]; // 替换绿色通道。  
            img.at<Vec3b>(i,j)[2]=img.at<Vec3b>(i+random,j+random)[2]; // 替换红色通道。  
        }  
    }  
  
    // 函数返回修改后的图像(由于我们传入的是引用,所以原始图像也被修改了)。  
    return img;   
}  
  
int main()  
{  
    Mat img=imread("D:\\QT_Project\\add wifi\\img\\send.png"); // 从指定路径读取图像,并将其存储在Mat对象img中。  
    imshow("img",img); // 显示原始图像。  
  
    Mat resimg = imgeGalss(img); // 调用imgeGalss函数,将修改后的图像存储在resimg中(但实际上img也被修改了)。  
    imshow("resimg",resimg); // 显示处理后的图像。  
  
    waitKey(0); // 等待用户按键。  
    return 0; // 程序正常结束。  
}

2.XY轴模糊

#include <opencv2/opencv.hpp>
using namespace cv;
/*XY轴模糊*/
int main()
{
    Mat img = imread("D:\\QT_Project\\add wifi\\img\\send.png");//图片路径

    //处理前
    imshow("img",img);//显示图片

    Mat resimg;

    //XY轴模糊
    cv::blur(img,resimg,Size(10,10));

    imshow("resimg",resimg);//显示图片

    waitKey(0);//等待按键

    return 0;
}

3.中值滤波

#include <opencv2/opencv.hpp>
using namespace cv;


int main()
{
    Mat img = imread("D:\\QT_Project\\add wifi\\img\\send.png");//图片路径

    //处理前
    imshow("img",img);//显示图片

    Mat resimg;

    //中值滤波
    cv::medianBlur(img,resimg,5);

    imshow("resimg",resimg);//显示图片

    waitKey(0);//等待按键

    return 0;
}

4.灰度处理

#include <opencv2/opencv.hpp>
using namespace cv;


int main()
{
    Mat img = imread("D:\\QT_Project\\add wifi\\img\\send.png");//图片路径

    //处理前
    imshow("img",img);//显示图片

    Mat resimg;

    //灰度处理
   cvtColor(img,resimg,COLOR_BGR2GRAY);

    imshow("resimg",resimg);//显示图片

    waitKey(0);//等待按键

    return 0;
}

5.调用摄像头

#include <opencv2/opencv.hpp>
using namespace cv;
 
int main()
{      
    Mat frame;
    VideoCapture cap(0);//摄像头调用
    while (cap.read(frame)) 
    {
        imshow("frame",frame);
        waitKey(24);       
    }
    return 0;
}

调用摄像头遇到问题:无法关闭程序,只能强行退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值