一. .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;
}
调用摄像头遇到问题:无法关闭程序,只能强行退出