
OpenCV图像处理教程
文章平均质量分 86
学习OpenCV图像处理教程过程中的笔记摘抄
,这部分主要是基础概念和操作
Ctrl-Z Pro
这个作者很懒,什么都没留下…
展开
-
<learnOpenCV02>opencv 加载、保存、修改图像
1.加载图像 imread2.修改图像 cvtColor3.保存图片 imwrite1.图片的加载以imreag_grayscale(0)为例,加载灰度图片#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui_c.h>#include <iostream>using name...原创 2019-09-06 09:06:56 · 222 阅读 · 0 评论 -
<LearnOpenCV14>上采样与降采样
图像金字塔概念1.我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔2. 一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。高斯金子塔 – 用来对图像进行降采样拉普拉斯金字塔 – 用来重建一张图片根据它的上层...原创 2019-09-14 16:58:55 · 580 阅读 · 1 评论 -
<LearnOpenCV15>基本阈值操作
图像阈值(threshold)阈值是把图像分割的标尺阈值类型一阈值二值化(threshold binary)左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值阈值类型一阈值反二值化(threshold binary Inverted)左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值阈值类型一截断 (truncate)左下方的图表示图像像素...原创 2019-09-17 18:57:00 · 251 阅读 · 0 评论 -
<LearnOpenCV16>常见算子 自定义卷积模糊
卷积概念卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)卷积如何工作把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达如下:Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1...原创 2019-09-18 18:58:08 · 459 阅读 · 0 评论 -
<LearnOpenCV17>处理边缘
卷积边界问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是: BOR...原创 2019-09-18 20:20:00 · 183 阅读 · 0 评论 -
<LearnOpenCV18>Sobel算子
卷积应用-图像边缘提取边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。如何捕捉/提取边缘 – 对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强,Sobel算子是离散微分算子(discrete differentiation operator),用...原创 2019-09-20 19:02:02 · 200 阅读 · 0 评论 -
<LearnOpenCV19>Laplance算子
处理流程高斯模糊 – 去噪声GaussianBlur()转换为灰度图像cvtColor()拉普拉斯 – 二阶导数计算Laplacian()取绝对值convertScaleAbs()显示结果GaussianBlur(src, dst, Size(3, 3), 0, 0); cvtColor(dst, src_gray, CV_BGR2GRAY); Laplacian(src_gray...原创 2019-09-20 19:39:37 · 195 阅读 · 0 评论 -
<LearnOpenCV20>Canny边缘检测
Canny算法介绍 – 五步 in cv::Canny高斯模糊 - GaussianBlur灰度转换 - cvtColor计算梯度 – Sobel/Scharr非最大信号抑制高低阈值输出二值图像T1, T2为阈值,凡是高于T2的都保留,凡是小于T1都丢弃,从高于T2的像素出发,凡是大于T1而且相互连接的,都保留。最终得到一个输出二值图像。推荐的高低阈值比值为 T2: T1 = 3:...原创 2019-09-23 14:50:57 · 148 阅读 · 0 评论 -
<LearnOpenCV21>霍夫变换-直线
霍夫直线变换介绍Hough Line Transform用来做直线检测前提条件 – 边缘检测已经完成平面空间到极坐标空间转换对于任意一条直线上的所有点来说变换到极坐标中,从[0~360]空间,可以得到r的大小属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线cv::HoughLinesP...原创 2019-09-23 15:39:39 · 186 阅读 · 0 评论 -
<LearnOpenCV21>霍夫变换-圆
霍夫圆检测原理相关API cv::HoughCircles因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:1. 检测边缘,发现可能的圆心2. 基于第一步的基础上从候选圆心开始计算最佳半径大小HoughCircles参数说明HoughCircles(InputArray image, //...原创 2019-09-23 20:43:25 · 228 阅读 · 0 评论 -
<LearnOpenCV22>像素重映射
Mat src, dst, map_x, map_y;const char * OUTPUT_TITLE = "remp demo";int index = 0;void update_map(void);int main(){ src = imread("D:/learnopencv/opencv003/girl.jpg"); if (!src.data) { printf(...原创 2019-09-24 21:12:41 · 232 阅读 · 0 评论 -
<LearnOpenCV13>提取水平和垂直线
原理方法图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值二值图像与灰度图...原创 2019-09-14 16:08:52 · 277 阅读 · 0 评论 -
<LearnOpenCV12>开操作、 闭操作、 形态学梯度、顶帽 、 黑帽
开操作- open先腐蚀后膨胀可以去掉小的对象,假设对象是前景色,背景是黑色Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1)); morphologyEx(src, dst, CV_MOP_OPEN, kernel);闭操作-close先膨胀后腐蚀(bin2)可以填充小的洞(fil...原创 2019-09-10 18:48:18 · 309 阅读 · 0 评论 -
<LearnOpenCV01>搭建opencv 4.0 + VS2017 环境
VS2017下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=15opencv4.0下载地址:https://opencv.org/releases/选择对应的系统下载,以win10系统为例,右键我的电脑点击属性。选择高级系统设...原创 2019-09-05 17:17:29 · 124 阅读 · 0 评论 -
<LearnOpenCV03>矩阵的掩膜操作
获取图像像素指针掩膜操作解释获取图像像素指针CV_Assert(myImage.depth() == CV_8U);Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。获得当前行指针const uchar* current= myImage.ptr(row );获取当前像素点P(row, col)的像素值 p(row, col) =curre...原创 2019-09-06 10:09:55 · 300 阅读 · 0 评论 -
<LearnOpenCV04>关于Mat对象
Mat对象使用完全复制:如果想把Mat对象的头部和数据部分一起复制,可以通过如下两个API实现Mat F = A.clone(); 或 Mat G; A.copyTo(G);//clone 和copy to 则是数据部分和头部都复制,两者的头部指向的数据地址并不同,也就是说当你修改其中一个,另一个不会被改变,只是这两个地址里存放的内存是一样的部分复制:一般情况下只会复制Mat对象的...原创 2019-09-07 09:56:53 · 182 阅读 · 0 评论 -
<LearnOpenCV05>图像操作
API:bitwise_not(src,dst)读写图像读写像素修改像素值读写图像 imread 可以指定加载为灰度或者RGB图像 Imwrite 保存图像文件,类型由扩展名决定读写像素、修改像素值读一个GRAY像素点的像素值(CV_8UC1)Scalar intensity = img.at<uchar>(y, x);或者 Scalar intensity ...原创 2019-09-08 09:51:19 · 154 阅读 · 0 评论 -
<LearnOpenCV06>图像混合
理论-线性混合操作其中α的取值范围为0~1之间相关API (addWeighted)参数1:输入图像Mat – src1参数2:输入图像src1的alpha值参数3:输入图像Mat – src2参数4:输入图像src2的alpha值参数5:gamma值参数6:输出混合图像注意点:两张图像的大小和类型必须一致才可以 Mat src1, src2, dst; src1 = i...原创 2019-09-08 10:15:07 · 280 阅读 · 0 评论 -
<LearnOpenCV07>调整图像亮度和对比度
理论图像变换可以看作如下:像素变换 – 点操作邻域操作 – 区域调整图像亮度和对比度属于像素变换-点操作重要的APIMat new_image = Mat::zeros( image.size(), image.type() ); 创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0saturate_cast(value)确保值大小范围为0~255之间Mat.at(y...原创 2019-09-08 11:33:02 · 195 阅读 · 0 评论 -
<LearnOpenCV08>绘制形状和文字
绘制形状与文字使用cv::Point与cv::Scalar绘制线、矩形、园、椭圆等基本几何形状随机生成与绘制文本1.使用cv::Point与cv::Scalar.Point表示2D平面上一个点x,yPoint p;p.x = 10;p.y = 8;orp = Pont(10,8);Scalar表示四个元素的向量Scalar(a, b, c);// a = blu...原创 2019-09-09 10:47:52 · 137 阅读 · 0 评论 -
<LearnOpenCV09>模糊图像一(均值模糊 高斯模糊)
模糊原理Smooth/Blur 是图像处理中最简单和常用的操作之一使用该操作的原因之一就为了给图像预处理时候减低噪声使用Smooth/Blur操作其背后是数学的卷积计算通常这些卷积算子计算都是线性操作,所以又叫线性滤波假设有6x6的图像像素点矩阵。卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像...原创 2019-09-09 15:24:50 · 446 阅读 · 0 评论 -
<LearnOpenCV10>模糊图像二(中值滤波 双边滤波)
中值滤波统计排序滤波器中值对椒盐噪声有很好的抑制作用-中值模糊medianBlur(Mat src, Mat dest, ksize)medianBlur(src, dst, 3);双边滤波均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同高斯双边模糊 – 是边缘保留的滤波方法,避免了边...原创 2019-09-09 17:04:16 · 463 阅读 · 0 评论 -
<LearnOpenCV11>膨胀与腐蚀
形态学操作(morphology operators)-膨胀图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学形态学有四个基本操作:腐蚀、膨胀、开、闭膨胀与腐蚀是图像处理中最常用的形态学操作手段跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是...原创 2019-09-10 17:42:32 · 682 阅读 · 0 评论 -
<LearnOpenCV23>直方图均衡化
图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。API说明cv::equalizeHistequalizeHist(InputArray src,//输入图像,必须是8-bit的单通道图像OutputArray dst// 输出结果)cvtColor(sr...原创 2019-09-26 16:43:46 · 149 阅读 · 0 评论