![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opencv
Henry Zhao
这个作者很懒,什么都没留下…
展开
-
OpenCV18.直方图
直方图概念(Histogram)像素值范围0~255共256个灰度等级,统计各个等级的出现次数的直方图。其实对于图像梯度,每个像素的角度,等一切图像属性,都可以建立直方图。常见的几个属性:dims:维度,灰度图像的维度为1bins:维度中字区域大小的划分,bins=256,划分为256个级别range:表示值得范围,灰度值得范围在[0~255]之间直方图均衡化相关APIequalizeHist(src, //src必须为8bit单通道图像dst)代码展示#include <ios原创 2020-09-29 19:33:01 · 142 阅读 · 0 评论 -
OpenCV17.像素重映射
重映射概念简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。相关APIRemap(InputArray src,// 输入图像OutputArray dst,// 输出图像InputArray map1,// x 映射表 CV_32FC1/CV_32FC2InputArray map2,// y 映射表int interpolation,// 选择的插值方法,常见线性插值,可选择立方等int borderMode,// BORDER_CON原创 2020-09-13 20:05:58 · 235 阅读 · 0 评论 -
OpenCV16.霍夫变换-圆
霍夫圆检测因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:检测边缘,发现可能的圆心基于第一步的基础上从候选圆心开始计算最佳半径大小相关APIHoughCircles(InputArray image, // 输入图像 ,必须是8位的单通道灰度图像OutputArray circles, // 输出结果,发现的圆信息Int method, // 方法 - HOUGH_GRADIENTDou原创 2020-09-12 09:23:38 · 182 阅读 · 0 评论 -
OpenCV15.霍夫变换-直线
霍夫直线变换用来做直线检测前提条件是边缘检测已完成平面空间到极坐标空间的转换(实际应用中,参数空间是不能选择直角坐标系的,因为原始图像直角坐标空间中的特殊直线x=c(垂直x轴,直线的斜率为无穷大)是没办法在基于直角坐标系的参数空间中表示的。)相关APIcv::HoughLinesP(InputArray src, // 输入图像,必须8-bit的灰度图像OutputArray lines, // 线的输出向量。由(x1, y1)、(x2, y2)确定一条直线double rho, // 以像原创 2020-09-11 08:34:34 · 160 阅读 · 0 评论 -
OpenCV14.Canny边缘检测
Canny边缘检测T2为高阈值,T1为低阈值,推荐的高低阈值比值为 T2: T1 = 3:1/2:1。凡是小于t1的被认为不是边缘要丢弃,大于t2的被认为是边缘被保留,在T1和T2之间的如果与所得到的边缘像素点相邻,则被认为是边缘,否则不是边缘。APICanny(src, sdges,threshold1, //低阈值threshold2, //高阈值,常取低阈值的2倍或者3倍aptertureSzie, //Sobel算子的sizebool L2gradient //选择true表示用L2原创 2020-09-07 12:02:15 · 256 阅读 · 0 评论 -
OpenCV13.Laplace算子
Laplace算子通过二阶导数计算,提取图像边缘处理流程高斯模糊—去噪声转换为灰度图像cvtColor()拉普拉斯—二阶导数计算Laplacian()取绝对值convertScaleAbs()显示结果代码展示#include <iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;int main(){ Mat src; src = imread("F:/Ope原创 2020-09-07 12:01:46 · 134 阅读 · 0 评论 -
OpenCV12.Sobel算子
卷积应用-图像边缘提取边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。如何捕捉/提取边缘 – 对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强相关APISobel(src, dst,depth //输出图像深度,只能大于等于原来的深度int dx //x方向几阶导数int dy //y方向几阶导数int ksize,Sobel算子kernel大小原创 2020-09-04 17:05:58 · 122 阅读 · 0 评论 -
OpenCV11.边缘处理
卷积边缘问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。边缘类型BORDER_CONSTANT 填充边缘用指定像素BORDER_REPLICATE 填充边缘像素用已知的边缘像素值BORDER_WRAP 用另一边的像素来补偿填充相关APIcopyMakeBorder(src, dstint top, int bottom, int l原创 2020-09-03 16:07:37 · 73 阅读 · 0 评论 -
OpenCV10.自定义线性滤波
卷积概念卷积是图像处理中的一个操作,是kernel在图像的每一个像素上的操作kernel本质上是一个固定大小的矩阵数组,其中心点成为锚点(anchor point)常见算子Robert算子和Sobel算子为梯度算子Robert_x100-1Robert_y01-10Sobel_x-101-202-101Sobel_y-1-2-1000121Laplac原创 2020-09-02 09:49:22 · 139 阅读 · 0 评论 -
OpenCV9.基本阈值操作
阈值原理简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。相关APIthreshold(src, dst,thresh, thresh_valuemaxval, 最大值type)阈值类型阈值二值化、阈值反二值化、截断、阈值取零、阈值反取零代码展示#include <iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;Mat src,原创 2020-09-01 17:19:08 · 91 阅读 · 0 评论 -
OpenCV8.图像金字塔
高斯金字塔高斯金子塔是从底向上,逐层降采样得到。降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。高斯金子塔是从底向上,逐层降采样得到。降采样之后图像大小是原图像MxN的M/2 x N/2 ,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。高斯金子塔的生成过程分为两步:1- 对当前层进行高斯模糊2- 删除当前层的偶数行与列即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。高斯不同(DOG)把同一张原创 2020-08-31 16:18:49 · 106 阅读 · 0 评论 -
OpenCV7.形态学操作
膨胀图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素腐蚀与膨胀操作类似以最小值替换锚点重叠下图像的像素值相关APIdilate(src, dst, kernel)erode(src, dst, kernel)获取结构元素getStructuringElement(int shape, Size ksize, Point anchor)shape包括(MORPH_RECT矩形\MORPH_CROSS十字形\MORPH_ELLIP原创 2020-08-30 18:30:33 · 136 阅读 · 0 评论 -
OpenCV6.模糊图像
模糊图像模糊原理Smooth/Blur给图像预处理时减低噪声,操作背后是数学的卷积计算相关API均值滤波:blur(Mat src, Mat dst, Size(xradius, yradius), Point(-1, -1));Size(x, y) 滤波模板kernel的尺寸point(-1, -1)锚点,也就是处理的像素位于kernel的什么位置,(-1,-1)表示锚点在kernel的中心,没有要不需要更改。高斯滤波:GaussianBlur(Mat src, Mat dst, Siz原创 2020-08-28 10:40:22 · 157 阅读 · 0 评论 -
OpenCV5.绘制形状与文字
绘制形状与文字使用PointPoint表示2D平面上的一个点x,y Point p1 = Point(100, 200); Point p2; p2.x = 300; p2.y = 500;LINE_4和LINE_8的区别两种线产生的算法不同LINE_8:下一个点连接上一个点的边或角,算法更简单LINE_4:下一个点和上一个点边相连(没有角),这样消除了8联通法线断裂的瑕疵,是更好的方法。随机数RNG和uniform(a,b)RNG rng(123); 括号中为种子,随机数由种子原创 2020-08-25 11:29:19 · 138 阅读 · 0 评论 -
OpenCV4.图像混合、亮度对比度调整
图像混合理论-线性混合操作g(x)=(1−α)f0(x)+αf1(x)g(x)=(1-\alpha)f_{0}(x)+\alpha f_{1}(x)g(x)=(1−α)f0(x)+αf1(x) 其中α的取值范围为0~1之间相关APIaddWeighted(输入图像1,输入图像1alpha值,输入图像2,输入图像2alpha值,gamma值,输出混合图像)注意:两张图像的大原创 2020-08-22 11:03:36 · 274 阅读 · 0 评论 -
OpenCV3.图像操作
图像操作读写像素int gray = gray_src.at<uchar>(row, col); //获取单通道该点像素值int b = src.at<Vec3b>(row, col)[0]; //获取三通道该点像素值int g = src.at<Vec3b>(row, col)[1];int r = src.at<Vec3b>(row, col)[2];修改像素值gray_src.at<uchar>(row, col) = 2原创 2020-08-20 11:15:37 · 126 阅读 · 0 评论 -
OpenCV2.Mat对象的学习
OpenCVMat学习create()创建Mat对象Mat n; //使用create()方法创建Mat对象,此方法不能为矩阵设初始值 n.create(src.size(), src.type()); Mat对象的复制src.copyTo(dst) //src和dst大小一致时不申请新的内存空间直接拷贝,不一致时申请新的内存空间并完成拷贝dst = src.clone() //完全的深拷贝,在内存中重新申请新的空间Mat b(a)和拷贝构造函数只复制头部,不复原创 2020-08-16 16:39:41 · 592 阅读 · 0 评论 -
OpenCV1.基本操作and掩膜例子
OpenCV基础操作加载图像Mat input = imread("路径");Mat input = imread("路径", IMREAD_UNCHANGED)(<0)加载原图Mat input = imread("路径", IMREAD_GRAYSCALE)(0)把原图作为灰度图像加载Mat input = imread("路径", IMREAD_COLOR)(>0)把原图作为RGB图像加载显示图像namedWindow("窗口名", WINDOW_AUTOSIZE);//创原创 2020-08-16 16:35:11 · 110 阅读 · 0 评论