OpenCV像素点操作 图片特效

本文详细介绍了OpenCV在图像处理方面的应用,包括图片读取显示、像素点操作如雪花屏特效、色彩反转、暗色处理和毛玻璃特效,以及库函数的使用,如高斯模糊、XY轴模糊、灰度化处理和中值滤波。此外,还展示了如何利用OpenCV播放视频和调用本机摄像头进行实时视频处理。
摘要由CSDN通过智能技术生成

目录

一:图片的读取显示

二:OpenCV像素点操作

雪花屏特效

色彩反转

暗色处理 

毛玻璃特效

三:OpenCV库函数的使用

高斯模糊

XY轴模糊

灰度化处理

中值滤波

四:OpenCV视频处理

播放视频:那些年,我们一起追的女孩

调用本机摄像头


一:图片的读取显示

对于读取图片的路径选择,

需要注意 是window下 \ 但是在ubuntu下是 / 在编写代码的时候需要修正

图片的读取显示

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

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径

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

    waitKey(0);//等待按键

    return 0;
}

效果

对图片可以滚轮放大查看RGB数值,不难看出,越是深色RGB数值越是接近0,越是浅色RGB数值越是接近255

查看分辨率 499 X 355,同时将鼠标移动至图片边缘处(看到 x=498,y=334 博主已经很尽力移到边缘啦,如果不信,你们自己操作一下,哈哈),

由此可以知道图片就是由一个又一个的像素点构成

二:OpenCV像素点操作

雪花屏特效

雪花屏特效实现

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

Mat imageprocess(Mat &img)
{
    int row = img.rows;
    int col = img.cols * img.channels();

    for(int i=0;i<row;i++)
    {
        uchar * data = img.ptr<uchar>(i);
        for(int j=0;j<col;j++)
        {
            //雪花屏特效
            int q = rand()%col;
            data[q]=155;//某些通道随机改成155
        }
    }
    return img;
}

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg = imageprocess(img);
    imshow("resimg",resimg);//显示接收图片

    waitKey(0);//等待按键
    return 0;
}

色彩反转

  

色彩反转实现

Mat imageprocess(Mat &img)
{
    int row = img.rows;
    int col = img.cols * img.channels();

    for(int i=0;i<row;i++)
    {
        uchar * data = img.ptr<uchar>(i);
        for(int j=0;j<col;j++)
        {
            //色彩反转
            data[j] = data[j] - 50;
        }
    }
    return img;
}

暗色处理 

暗色处理实现

Mat imageprocess(Mat &img)
{
    int row = img.rows;
    int col = img.cols * img.channels();

    for(int i=0;i<row;i++)
    {
        uchar * data = img.ptr<uchar>(i);
        for(int j=0;j<col;j++)
        {
            //暗色处理
            data[j] = data[j]/2;
        }
    }
    return img;
}

毛玻璃特效

毛玻璃特效实现

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

//毛玻璃特效
Mat imageGalss(Mat &img)
{
    RNG rng;
    int random = 0;
    int num = 5;
    for(int i=0;i<img.rows -5;i++)
    {
        for(int j=0;j<img.cols -5;j++)
        {
            random = rng.uniform(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(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg = imageGalss(img);
    imshow("resimg",resimg);//显示接收图片

    waitKey(0);//等待按键
    return 0;
}

三:OpenCV库函数的使用

高斯模糊

高斯模糊,如下图,就好像 近视眼的人没有戴眼镜看事物的情境(轻度近视)

高斯模糊实现

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

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg;
    //高斯模糊
    cv::GaussianBlur(img,resimg,Size(5,5),0);

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

    waitKey(0);//等待按键
    return 0;
}

XY轴模糊

XY轴模糊,就好像 近视眼的人没有戴眼镜看事物的情境(重度近视)

XY轴模糊实现

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

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg;
    //XY轴模糊
    cv::blur(img,resimg,Size(10,10));
    imshow("resimg",resimg);//显示接收图片

    waitKey(0);//等待按键
    return 0;
}

灰度化处理

灰度化处理实现

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

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg;
    //灰度处理
    cvtColor(img,resimg,CV_BGR2GRAY);
    imshow("resimg",resimg);//显示接收图片

    waitKey(0);//等待按键
    return 0;
}

中值滤波

中值滤波,视觉上就感觉像是油画

中值滤波实现

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

int main(int argc, char *argv[])
{
    Mat img = imread("D:/000imageopencv/333.jpg");//图片路径
    imshow("img",img);//显示图片

    Mat resimg;
    //中值滤波
    cv::medianBlur(img,resimg,5);
    imshow("resimg",resimg);//显示接收图片

    waitKey(0);//等待按键
    return 0;
}

四:OpenCV视频处理

播放视频:那些年,我们一起追的女孩

  

视频播放实现

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

int main(int argc, char *argv[])
{
    Mat frame;
    VideoCapture cap("D:/000000000000000ffmpeg/那些年,我们一起追的女孩.mp4");

    while (cap.read(frame))
    {
        imshow("frame",frame);
        waitKey(50);
    }
    return 0;
}

调用本机摄像头

如下图,可以调用本地摄像头

调用本地摄像头 实现

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

int main(int argc, char *argv[])
{
    Mat frame;
    VideoCapture cap(0);

    while (cap.read(frame))
    {
        imshow("frame",frame);
        waitKey(50);
    }
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值