![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV
计算机视觉小趴菜
计算机视觉方向硕士,某工业视觉公司算法工程师小趴菜
展开
-
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 · 107 阅读 · 0 评论 -
opencv-015 自定义线性滤波
自定义线性滤波l卷积概念l常见算子l自定义卷积模糊l代码演示卷积概念l卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。lKernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)卷积如何工作l把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达...原创 2018-12-06 12:08:33 · 189 阅读 · 0 评论 -
opencv016-处理边缘
卷积边缘问题l图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处...原创 2018-12-06 14:58:56 · 185 阅读 · 0 评论 -
opencv017-Sobel算子
l卷积应用-图像边缘提取l相关APIl代码演示卷积应用-图像边缘提取\卷积应用-图像边缘提取l边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。l如何捕捉/提取边缘 – 对图像求它的一阶导 delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强,...原创 2018-12-06 18:35:34 · 199 阅读 · 0 评论 -
opencv018-Laplance算子
理论解释:在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。l二阶导数我不会,别担心 ->拉普拉斯算子(Laplance operator)lOpencv已经提供了相关API - cv::Laplance处理流程:l高斯模糊 – 去噪声GaussianBlur()l转换为灰度图像cvt...原创 2018-12-06 18:54:51 · 234 阅读 · 0 评论 -
opencv019-Canny边缘检测
Canny算法介绍lCanny是边缘检测算法,在1986年提出的。l是一个很好的边缘检测器l很常用也很实用的图像处理方法Canny算法介绍 – 五步 in cv::Canny1.高斯模糊 - GaussianBlur2.灰度转换 - cvtColor3.计算梯度 – Sobel/Scharr4.非最大信号抑制5.高低阈值输出二值图像 Canny算法介绍 - ...原创 2018-12-06 20:29:35 · 152 阅读 · 0 评论 -
opencv028-轮廓发现
轮廓发现(find contour)l轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现结果lAPI介绍-findContours发现轮廓-drawContours绘制轮廓轮廓发现(find contour)在二值图像上发现轮廓使用API cv::findContours(InputOutputArray binImg...原创 2018-12-15 13:23:00 · 275 阅读 · 0 评论 -
opencv029-凸包
概念介绍l什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。正式定义:包含点集合S中所有点的最小凸多边形称为凸包l检测算法- Graham扫描法概念介绍-Graham扫描算法l首先选择Y方向最低的点作为起始点p0l从p0开始极坐标扫描,依次添加p1….pn(排序顺序是根据极坐标的角度大小,逆时针方向)...原创 2018-12-15 13:03:40 · 282 阅读 · 0 评论 -
opencv021-霍夫圆变换
霍夫圆检测原理相关API cv::HoughCirclesl因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。l基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步: 1. 检测边缘,发现可能的圆心 2. 基于第一步的基础上从候选圆心开始计算最佳半径大小HoughCircles参数说明HoughCircles(Input...原创 2018-12-10 19:28:19 · 176 阅读 · 0 评论 -
opencv022-像素重映射
什么是像素重映射l简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。g(x,y)是重映射之后的图像,h(x,y)是功能函数,f是源图像什么是像素重映射假设有映射函数API介绍cv::remapRemap(InputArray src,// 输入图像OutputArray dst,// 输出图像InputAr...原创 2018-12-11 10:35:54 · 271 阅读 · 0 评论 -
opencv030-轮廓周围绘制矩形框和圆形框
轮廓周围绘制矩形 -APIlapproxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)基于RDP算法实现,目的是减少多边形轮廓点数lcv::boundingRect(InputArray points)得到轮廓周围最小矩形左上交点坐标和右下角点坐标,绘制一个矩...原创 2018-12-17 13:47:33 · 318 阅读 · 0 评论 -
opencv031-图像矩
矩的概念介绍l图像中心Center(x0, y0)API介绍与使用 – cv::moments 计算生成数据API介绍与使用-计算矩cv::momentsmoments(InputArray array,//输入数据bool binaryImage=false // 是否为二值图像)contourArea(InputArray contour...原创 2018-12-17 16:17:34 · 143 阅读 · 0 评论 -
opencv024-直方图计算
直方图计算直方图概念假设有图像数据8x8,像素值范围0~14共15个灰度等级,、统计得到各个等级出现次数及直方图如右侧所示,每个紫色的长条叫BINl上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。l直方图最常见的几个属性: - dims 表...原创 2018-12-11 16:28:04 · 483 阅读 · 0 评论 -
opencv023-直方图均衡化
什么是直方图(Histogram)假设有图像数据8x8,像素值范围0~14共15个灰度等级,统计得到各个等级出现次数及直方图如右侧所示。l图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。图像直方图直方图均衡化是一种提高图像对比度的方法,拉伸图像灰...原创 2018-12-11 14:01:25 · 121 阅读 · 0 评论 -
opencv025-直方图比较
直方图比较方法-概述对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间。然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种:-Correlation 相关性比较-Chi-Square 卡方比较-Intersection 十字交叉性-Bhattacharyya distance 巴氏距离直方...原创 2018-12-13 09:52:12 · 117 阅读 · 0 评论 -
opencv014-图像阈值
基本阈值操作l阈值 是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)阈值类型一阈值二值化(threshold binary)l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值阈值类型一阈值反二值化(threshold binary Inverted)l左下方的图表示图像像素...原创 2018-12-04 21:42:41 · 122 阅读 · 0 评论 -
005 矩阵初始化、运算、特殊矩阵初始化
#矩阵定义 M行*N列import tensorflow as tfdata1=tf.constant([[6,6]])data2=tf.constant([[2], [2]])data3=tf.constant([[3,3]])data4=tf.constant([[1,2], [3,4], ...原创 2018-11-13 14:51:56 · 347 阅读 · 0 评论 -
opencv007-绘制形状与文字(包含随机数的生成)
主要是线段、矩形、圆、椭圆、多边形以及随机线段的生成,还有在图片上添加文字。随机生成数cv::RNG生成高斯随机数gaussian(double sigma);生成正态分布随机数uniform(int a,int b);添加文字:putText(图片,文字,位置,字体类型,尺寸缩放,颜色,线宽,线形);#include <opencv2/opencv.hpp>#...原创 2018-10-15 08:44:10 · 138 阅读 · 0 评论 -
opencv008-图像模糊一
模糊原理:Smooth/Blur是图像处理中最简单和常用的操作之一。使用该操作的原因之一就是为了给图像预处理时候减低噪声。使用Smooth/Blur操作其背后是数学的卷积计算。 通常这些卷积算子计算都是线性操作,所以又叫线性滤波。相关API:均值滤波:blur(Mat src,Mat dst,Size(xradius,yradius),Point(-1,-1));/...原创 2018-10-15 12:32:02 · 93 阅读 · 0 评论 -
opencv009-图像模糊二(中值滤波和双边滤波)+添加椒盐噪音
中值滤波:1.统计排序滤波器 2.中值对椒盐噪声有很好的抑制作用medianBlur(Mat src, Mat dest, ksize);//中值模糊的ksize大小必须是大于1而且必须是奇数。双边滤波:l均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重l高斯模糊部分克服了该缺陷,但是无法完全避免,因为没有考虑像素值的不同l高斯双边模糊 – 是边缘保留...原创 2018-10-15 16:18:59 · 371 阅读 · 0 评论 -
opencv005-图像混合(addWeighted)
理论-线性混合操作:;其中的取值范围为0~1之间API (addWeighted):参数1:输入图像Mat – src1参数2:输入图像src1的alpha值参数3:输入图像Mat – src2参数4:输入图像src2的alpha值参数5:gamma值参数6:输出混合图像注意:两张图像的大小和类型必须一致才可以...原创 2018-10-15 16:29:46 · 167 阅读 · 0 评论 -
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 · 233 阅读 · 0 评论 -
opencv013-图像上采样和下采样(+高斯不同)
图像金字塔概念:1. 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔2. 一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。l高斯金子塔 – 用来对图像进行降采样l拉普拉斯金字塔 – 用来重建...原创 2018-10-18 19:27:10 · 1279 阅读 · 0 评论 -
opencv010-形态学操作(膨胀与腐蚀操作)
形态学操作(morphology operators):l图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学l形态学有四个基本操作:腐蚀、膨胀、开、闭l膨胀与腐蚀是图像处理中最常用的形态学操作手段形态学操作-膨胀:l跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换...原创 2018-10-15 20:38:46 · 136 阅读 · 0 评论 -
opencv011-形态学操作(开、闭运算,形态学梯度,顶帽,黑帽)
形态学操作多针对二值图像和灰度图像。 开操作- open:l先腐蚀后膨胀l可以去掉小的对象,假设对象是前景色,背景是黑色闭操作-close:l先膨胀后腐蚀(bin2)l可以填充小的洞(fill hole),假设对象是前景色,背景是黑色形态学梯度- Morphological Gradient:l膨胀减去腐蚀 l又称为基本梯度(其它还包括-内部梯度、方向梯...原创 2018-10-16 10:07:11 · 632 阅读 · 0 评论 -
opencv012-形态学操作应用(提取水平与垂直线)
原理方法:图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。 - 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 - 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素...原创 2018-10-16 13:58:59 · 276 阅读 · 0 评论 -
001 OpenCV+TensorFlow+python环境搭建
1.anaconda下载https://www.anaconda.com/download/ 并安装2.创建tensorflow开发环境,打开anaconda prompt输入conda create -n tensorflow python=3.63.打开anaconda navigator,添加tensorflow、opencv、notebook源代码。然后点击App...原创 2018-10-30 21:45:56 · 381 阅读 · 2 评论 -
002 OpenCV+TensorFlow 测试案例hello world
tensorflow的验证程序#import 2strint 3printimport tensorflow as tfhello=tf.constant('hello tf!')sess=tf.Session()#所有的操作都必须经过session绘画来进行print(sess.run(hello))#note:1.常量创建 2.session上下文的创建 3pr...原创 2018-10-30 21:52:30 · 286 阅读 · 0 评论 -
003. 图片读取+图片保存+像素操作
1.图片读取与展示# 1.引入opencv 2.调用API 3.暂停stop import cv2img = cv2.imread('2.png',1)#图片读取,1.图片名称2.读取图片的类型 (0,gray 1.color)cv2.imshow('image',img)#窗体名称 ,图片名称cv2.waitKey(0)2.图片写入import cv2img=...原创 2018-11-06 15:28:38 · 210 阅读 · 0 评论 -
004 tensorflow常量变量定义及运算原理+常量变量四则运算
#opencv tensorflow#类比 语法 api 原理#基础数据类型 运算符 流程 字典 数组import tensorflow as tfdata1=tf.constant(2.5)data2=tf.Variable(10,name='var')sess=tf.Session()print(data1)print(data2)'''print(sess.run(da...原创 2018-11-06 16:34:55 · 182 阅读 · 0 评论 -
windows环境下使用opencv训练级联分类器traincascade
基于opencv3.4.1(https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv-3.1.0.exe/download)+contrib(https://github.com/opencv/opencv_contrib/releases),下载相应版本。cmake下载msi版本。(https://c...原创 2019-05-23 13:00:47 · 743 阅读 · 0 评论