C++
计算机视觉小趴菜
计算机视觉方向硕士,某工业视觉公司算法工程师小趴菜
展开
-
opencv004-图像操作(像素操作)
读写像素: l读一个GRAY像素点的像素值(CV_8UC1) Scalar intensity = img.at<uchar>(y, x); 或者 Scalar intensity = img.at<uchar>(Point(x, y)); l读一个RGB像素点的像素值 Vec3f intensity = img.at<Vec3f>(y, x...原创 2018-10-15 18:03:10 · 228 阅读 · 0 评论 -
opencv018-Laplance算子
理论 解释:在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶 导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。 l二阶导数我不会,别担心 ->拉普拉斯算子(Laplance operator) lOpencv已经提供了相关API - cv::Laplance 处理流程: l高斯模糊 – 去噪声GaussianBlur() l转换为灰度图像cvt...原创 2018-12-06 18:54:51 · 225 阅读 · 0 评论 -
opencv019-Canny边缘检测
Canny算法介绍 lCanny是边缘检测算法,在1986年提出的。 l是一个很好的边缘检测器 l很常用也很实用的图像处理方法 Canny算法介绍 – 五步 in cv::Canny 1.高斯模糊 - GaussianBlur 2.灰度转换 - cvtColor 3.计算梯度 – Sobel/Scharr 4.非最大信号抑制 5.高低阈值输出二值图像 Canny算法介绍 - ...原创 2018-12-06 20:29:35 · 143 阅读 · 0 评论 -
opencv028-轮廓发现
轮廓发现(find contour) l轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。 所以边缘提取的阈值选定会影响最终轮廓发现结果 lAPI介绍 -findContours发现轮廓 -drawContours绘制轮廓 轮廓发现(find contour) 在二值图像上发现轮廓使用API cv::findContours( InputOutputArray binImg...原创 2018-12-15 13:23:00 · 268 阅读 · 0 评论 -
opencv029-凸包
概念介绍 l什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义: 包含点集合S中所有点的最小凸多边形称为凸包 l检测算法 - Graham扫描法 概念介绍-Graham扫描算法 l首先选择Y方向最低的点作为起始点p0 l从p0开始极坐标扫描,依次添加p1….pn(排序顺序是根据极坐标的角度大小,逆时针方向) ...原创 2018-12-15 13:03:40 · 276 阅读 · 0 评论 -
opencv021-霍夫圆变换
霍夫圆检测原理 相关API cv::HoughCircles l因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。 l基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步: 1. 检测边缘,发现可能的圆心 2. 基于第一步的基础上从候选圆心开始计算最佳半径大小 HoughCircles参数说明 HoughCircles( Input...原创 2018-12-10 19:28:19 · 166 阅读 · 0 评论 -
opencv022-像素重映射
什么是像素重映射 l简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。 g(x,y)是重映射之后的图像,h(x,y)是功能函数,f是源图像 什么是像素重映射 假设有映射函数 API介绍cv::remap Remap( InputArray src,// 输入图像 OutputArray dst,// 输出图像 InputAr...原创 2018-12-11 10:35:54 · 249 阅读 · 0 评论 -
opencv030-轮廓周围绘制矩形框和圆形框
轮廓周围绘制矩形 -API lapproxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed) 基于RDP算法实现,目的是减少多边形轮廓点数 lcv::boundingRect(InputArray points)得到轮廓周围最小矩形左上交点坐标和右下角点坐标,绘制一个矩...原创 2018-12-17 13:47:33 · 306 阅读 · 0 评论 -
opencv031-图像矩
矩的概念介绍 l图像中心Center(x0, y0) API介绍与使用 – cv::moments 计算生成数据 API介绍与使用-计算矩cv::moments moments( InputArray array,//输入数据 bool binaryImage=false // 是否为二值图像 ) contourArea( InputArray contour...原创 2018-12-17 16:17:34 · 120 阅读 · 0 评论 -
opencv024-直方图计算
直方图计算 直方图概念 假设有图像数据8x8,像素值范围0~14共15个灰度等级,、统计得到各个等级出现次数及直方图如右侧所示,每个紫色的长条叫BIN l上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。 l直方图最常见的几个属性: - dims 表...原创 2018-12-11 16:28:04 · 460 阅读 · 0 评论 -
opencv017-Sobel算子
l卷积应用-图像边缘提取 l相关API l代码演示 卷积应用-图像边缘提取 \ 卷积应用-图像边缘提取 l边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。 l如何捕捉/提取边缘 – 对图像求它的一阶导 delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强, ...原创 2018-12-06 18:35:34 · 178 阅读 · 0 评论 -
opencv016-处理边缘
卷积边缘问题 l图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。 处理边缘 在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在 四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之 后再去掉这些边缘。openCV中默认的处...原创 2018-12-06 14:58:56 · 175 阅读 · 0 评论 -
opencv-015 自定义线性滤波
自定义线性滤波 l卷积概念 l常见算子 l自定义卷积模糊 l代码演示 卷积概念 l卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。 lKernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point) 卷积如何工作 l把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达...原创 2018-12-06 12:08:33 · 166 阅读 · 0 评论 -
opencv006-调整图像亮度和对比度
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(int argc, char** argv) { Mat src, dst; src = imread("C:/Users/liyangxian/...原创 2018-10-14 20:31:23 · 99 阅读 · 0 评论 -
opencv007-绘制形状与文字(包含随机数的生成)
主要是线段、矩形、圆、椭圆、多边形以及随机线段的生成,还有在图片上添加文字。 随机生成数cv::RNG 生成高斯随机数gaussian(double sigma); 生成正态分布随机数uniform(int a,int b); 添加文字:putText(图片,文字,位置,字体类型,尺寸缩放,颜色,线宽,线形); #include <opencv2/opencv.hpp> #...原创 2018-10-15 08:44:10 · 134 阅读 · 0 评论 -
opencv008-图像模糊一
模糊原理: Smooth/Blur是图像处理中最简单和常用的操作之一。 使用该操作的原因之一就是为了给图像预处理时候减低噪声。 使用Smooth/Blur操作其背后是数学的卷积计算。 通常这些卷积算子计算都是线性操作,所以又叫线性滤波。 相关API: 均值滤波: blur(Mat src,Mat dst,Size(xradius,yradius),Point(-1,-1));/...原创 2018-10-15 12:32:02 · 83 阅读 · 0 评论 -
opencv013-图像上采样和下采样(+高斯不同)
图像金字塔概念: 1. 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔 2. 一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。 l高斯金子塔 – 用来对图像进行降采样 l拉普拉斯金字塔 – 用来重建...原创 2018-10-18 19:27:10 · 1272 阅读 · 0 评论 -
opencv011-形态学操作(开、闭运算,形态学梯度,顶帽,黑帽)
形态学操作多针对二值图像和灰度图像。 开操作- open: l先腐蚀后膨胀 l可以去掉小的对象,假设对象是前景色,背景是黑色 闭操作-close: l先膨胀后腐蚀(bin2) l可以填充小的洞(fill hole),假设对象是前景色,背景是黑色 形态学梯度- Morphological Gradient: l膨胀减去腐蚀 l又称为基本梯度(其它还包括-内部梯度、方向梯...原创 2018-10-16 10:07:11 · 625 阅读 · 0 评论 -
opencv012-形态学操作应用(提取水平与垂直线)
原理方法: 图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏 感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像 的操作、得到想要的结果。 - 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 - 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素...原创 2018-10-16 13:58:59 · 267 阅读 · 0 评论 -
006 numpy矩阵使用+matplotlib(绘图)
#numpy使用类比数据库,增删改查(CURD) import numpy as np data1=np.array([1,2,3,4,5]) print(data1) data2=np.array([[1,2], [3,4]]) print(data2) #维度输出 print(data1.shape,data2.shape) #空矩阵 单位矩阵 print(n...原创 2018-11-13 15:18:55 · 643 阅读 · 0 评论 -
opencv014-图像阈值
基本阈值操作 l阈值 是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation) 阈值类型一阈值二值化(threshold binary) l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值 阈值类型一阈值反二值化(threshold binary Inverted) l左下方的图表示图像像素...原创 2018-12-04 21:42:41 · 112 阅读 · 0 评论 -
opencv025-直方图比较
直方图比较方法-概述 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间。然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种: -Correlation 相关性比较 -Chi-Square 卡方比较 -Intersection 十字交叉性 -Bhattacharyya distance 巴氏距离 直方...原创 2018-12-13 09:52:12 · 105 阅读 · 0 评论 -
opencv023-直方图均衡化
什么是直方图(Histogram) 假设有图像数据8x8,像素值范围0~14共15个灰度等级,统计得到各个等级出现次数及直方图如右侧所示。 l图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。 图像直方图 直方图均衡化 是一种提高图像对比度的方法,拉伸图像灰...原创 2018-12-11 14:01:25 · 114 阅读 · 0 评论