opencv处理图像(一)

今天我想到了一个项目,是这样设计的,我是用c++qt6开发的,我在主线程中用OpenGL显示渲染图像,再造一个opencv的工作类,就是根据主程序的需求,比如我需要一个高斯模糊处理的图像,我需要图像轮廓等等,按照主程序指令,在opencv中是用函数指针还是创建对象还没考虑好,反正就是要把任务丢到线程池里去跑,运行好了以后将结果通过信号槽传回给主线程。

opencv中设计的相关概念

Mat

mat就是存放图像的矩阵,他的通道和OpenGL的有些区别,使用时需要转换,opencv用的是BGR,而OpenGL用的是RGB或RGBA,坐标轴也是,opencv的原点在左上角,OpenGL的在左下角,使用时需要注意翻转坐标轴。

数据形式Mat 维度示例
灰度图像2 阶矩阵尺寸:(rows, cols)
彩色图像(RGB/BGR)3 阶矩阵尺寸:(rows, cols, channels)
视频序列4 阶矩阵尺寸:(frames, rows, cols, channels)
高维数据(如点云)N 阶矩阵用户自定义维度(如 3D 体素网格)

读取图片,视频,摄像头

读取图片就是cv::imread()。

读取视频和摄像头差不多,只不过是输入设备不同而已,在无限或有限循环里面用videocapture对象read每一帧,每一帧waitkey()多久

高斯模糊

高斯模糊(Gaussian Blur)是图像处理中最常用的平滑滤波技术之一,它通过高斯函数生成的卷积核来模糊图像,能有效去除噪声、降低细节层次,同时保留图像的整体结构。通俗点介绍就是有点像我以前项目绘制的草帽,中间高,周围逐渐降低,越高代表权重越高(插值算法)

cv::GaussianBlur(src, dst, ksize, sigmaX, sigmaY=0, borderType=cv::BORDER_DEFAULT);
参数说明
src输入图像(支持多通道,如彩色图)
dst输出图像(与输入同尺寸和类型)
ksize高斯核大小(宽高为奇数的 cv::Size(w,h),如 cv::Size(5,5)
sigmaXX方向标准差(若设为0,则根据 ksize 自动计算:σ = 0.3*((ksize-1)*0.5 - 1) + 0.8)
sigmaYY方向标准差(默认0,表示与sigmaX相同)
borderType边界处理方式(推荐默认值)

sigma标准差不用填,程序会根据ksize自动计算 ,ksize就是高斯模糊的卷积核大小,他越大图像越模糊,必须是奇数。

  • 高斯核可分解为水平和垂直方向的一维核,减少计算量:
    // 等效于二维高斯模糊,但更快
    cv::Mat tmp;
    cv::GaussianBlur(img, tmp, cv::Size(15,1), 0); // 水平方向
    cv::GaussianBlur(tmp, blurred, cv::Size(1,15), 0); // 垂直方向

灰度图

这个灰度图就是个黑白的图片,单通道只有B上有数字,操作也很简单,将opencv的图像从BGR转换为GRAY 

​核心函数

cv::cvtColor(src, dst, cv::COLOR_BGR2GRAY);
参数说明
src输入的 ​彩色图像​(BGR 格式,即 OpenCV 默认读取的格式)
dst输出的 ​灰度图像​(单通道)
cv::COLOR_BGR2GRAY颜色空间转换代码,表示从 BGR 到灰度的转换

线程的设计太困了,明天再写吧 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值