![](https://img-blog.csdnimg.cn/d6e1c2b099b342d2a90a19efed651a2a.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenCV
文章平均质量分 65
cv2
Enzo 想砸电脑
这个作者很懒,什么都没留下…
展开
-
【opencv】2、图像处理基础
《OpenCV 轻松入门 面向Python》 学习笔记图像处理基础2.3 像素访问及修改2.4 ROI :range of interest2.5 通道操作1. 通过索引拆分2. 通过函数拆分 cv2.split(image)3. 通道合并 cv2.merge([b, g, r])2.6 获取图像属性2.3 像素访问及修改# 访问图像的像素点, 彩图必须指定channelimage.item(row, column, channel)# 修改像素值,彩图必须指定channelim原创 2021-01-03 20:52:41 · 159 阅读 · 1 评论 -
3.1 图像加法运算 cv2.add()
3.1 图像加法运算1. 加号运算符 “+”2. cv2.add()3. 加掩模(掩码)1. 加号运算符 “+”如果两个像素相加的结果大于255, 结果对256取模。比如: (254+59)%256 = 57, 像素值为254和像素值为59的两个像素,相加结果为572. cv2.add()result = cv2.add(pixel_value_1, pixel_value_2, mask)使用函数cv2.add() 对 两个图像中 对应位置的 两个像素 执行加法运算时,如果结果大于255,原创 2021-01-04 12:04:28 · 704 阅读 · 0 评论 -
3.2 图像加权和 cv2.addWeighted()
图像加权和result = cv2.addWeighted(img1, alpha, image2, beta, gamma)函数实现功能是:result = img1 x alpha + image2 x beta + gamma要注意的是:image1和image2的图片尺寸和channel数必须一样gamma是必选参数,如果值为0, 就赋值: gamma=0, 但是不能省略举例:import cv2import numpy as npimg1 = np.ones((4,原创 2021-01-04 12:11:58 · 426 阅读 · 0 评论 -
3.3 按位逻辑运算 cv2.bitwise_and() // cv2.bitwise_or() // cv2.bitwise_xor() // cv2.bitwise_not()
3.3 按位逻辑运算cv2.bitwise_and(img1, img2)cv2.bitwise_or(img1, img2)cv2.bitwise_xor(img1, img2)cv2.bitwise_not(img)任何数值N 与 数值0(二进制为 0000 0000) 进行按位与操作,都会得到数值0任何数值N 与 数值255(二进制为 1111 1111) 进行按位与操作,都会得到数值N本身任何数值N 与 其本身进行按位与操作,都会得到数值N 本身...原创 2021-01-04 12:15:13 · 743 阅读 · 0 评论 -
3.4 掩模(掩码) mask
3.1 图像加法运算3.1.1 加号运算符 “+”如果两个像素相加的结果大于255, 结果对256取模。比如: (254+59)%256 = 57, 像素值为254和像素值为59的两个像素,相加结果为573.1.2 cv2.add()result = cv2.add(pixel_value_1, pixel_value_2)使用函数cv2.add() 对两个像素执行加法运算,如果结果大于255,则取饱和值2553.2 图像加权和...原创 2021-01-03 21:20:01 · 425 阅读 · 0 评论 -
3.5 图像与数值的运算
在加法运算 cv2.add() 和按位运算中,参与运算的两个算子(参数)既可以是两幅图像,也可以是一副图像和一个数值。import cv2import numpy as npimg1 = np.ones((4, 4), dtype=np.uint8) * 3img2 = np.ones((4, 4), dtype=np.uint8) * 5img3 = cv2.add(img1, img2)img4 = cv2.add(img1, 6)img5 = cv2.add(6, img2)pr原创 2021-01-04 14:45:04 · 129 阅读 · 0 评论 -
3.6 位平面分解
《OpenCV 轻松入门 面向Python》 学习笔记将灰度图像中的像素值转换为二进制,然后将二进制的某一比特位上的值进行组合,这种 按照位分解的操作 叫做==“位平面分解”==。举例:针对RGB图像,将其R通道的第3个位平面,G通道的第3个位平面,B通道的第3个位平面进行合并,我们称合并后的图像为原RGB图像第个位平面。用提取矩阵(提取因子),通过与原图像做按位与操作,提取位平面提取因子是一个二进制为8位的数值。提取因子哪位上的值为1(其他位上全为0), 就可以提取图像像素哪位上的数字。将灰原创 2021-01-04 23:05:51 · 1427 阅读 · 1 评论 -
【opencv】5.2 几何变换-- 翻转 cv2.flip()
cv2.flip()原创 2021-01-06 08:29:53 · 491 阅读 · 2 评论 -
【opencv】5.4 几何变换--透视 cv2.warpPerspective()
《OpenCV 轻松入门 面向Python》 学习笔记上一节介绍了仿射变换,仿射变换可以将矩形图片映射为平行四边形,这一节学习的透视变换可以将矩形图片映射为任意四边形。函数原型:cv2.warpPerspective(src, M, dsize=(cols, rows))参数:src: 原图M: 一个3x3的变换矩阵dsize: 输出图像的尺寸大小, 先指定(第一个参数是)col,再指定(第二个参数是)row那么转换矩阵怎么得到呢?可以通过函数cv2.warpPerspectiveTr原创 2021-01-07 14:22:57 · 8296 阅读 · 3 评论 -
【opencv】5.5 几何变换-- 重映射 cv2.remap()
《OpenCV 轻松入门 面向Python》 学习笔记把一张图像内的像素点放置到另一幅图像内指定的位置,这个操作叫做重映射。前两节学习的仿射变换和透视变换,是通过变换矩阵来指定映射方式。有时我们希望通过自定义的方式来指定重映射。opencv 就为我们提供了一个自定义映射的函数 cv2.remap()函数原型:cv2.remap(src_img, map1, map2, interpolation)参数:src_img:原始图像map1:目标图像中的每一个像素都对应于(映射于)原始图像的中原创 2021-01-07 17:03:45 · 2079 阅读 · 1 评论 -
6.1 阈值处理-- threshold函数
《OpenCV 轻松入门 面向Python》 学习笔记函数原型:cv2.threshold(src, thresh, maxval, type)参数:src:原图像, 可以是多通道的thresh:要设定的阈值maxval:当type类型是THRESH_BINARY时,需要设定的最大值type:阈值分割的方式type 类型有:以下以type类型为二值化阈值处理(cv2.THREAH_BINARY)方式来举例:...原创 2021-01-08 19:42:37 · 6688 阅读 · 0 评论 -
6.2 阈值处理-- 自适应阈值处理和 阈值Otsu处理
对于色彩均衡的图像来说,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,如果只用一个阈值,就无法得到清晰有效的阈值分割结果图像。所以这一节我们介绍自适应阈值处理(阈值是变化的)。在阈值处理时,自适应阈值处理方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用阈值对当前像素进行处理。与普通阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大的图像。函数原型:dst = cv2.adaptiveThreshold(src, maxValue, adaptiveM原创 2021-01-08 21:16:44 · 1122 阅读 · 0 评论 -
第7章 图像平滑处理-- 均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波,2D卷积
《OpenCV 轻松入门 面向Python》 学习笔记1. 均值滤波函数原型:dst_img = cv2.blur(src_img, size, anchor, borderType)参数:dst_img:滤波后得到的结果图像src_img:原始图像size:滤波核的大小(邻域区域大小),可以有任意通道数量,并能对各个通道独立处理。例如,参数值为(3, 3) 或者 (5, 5)anchor:锚点, 默认值为(-1, -1),表示当前计算均值的点位于核的中心点位置。borderType:原创 2021-01-11 07:36:57 · 444 阅读 · 0 评论 -
【opencv】第8章 形态学操作
《OpenCV 轻松入门 面向Python》 学习笔记 - 第8章 形态学操作原创 2021-01-14 08:03:07 · 542 阅读 · 0 评论 -
第9章 图像梯度 -- 9.1 Sobel 算子
《OpenCV 轻松入门 面向Python》 学习笔记Sobel 算子1. Sobel 理论基础1.1 计算水平方向偏导数的近似值1.2 计算垂直方向偏导数的近似值2. Sobel 算子及函数使用参数 ddepth, 输出图像深度方向 dx, dy图像梯度计算的是图像变化的速度。对于图像边缘的部分,其灰度值变化较大,梯度值也较大。相反,图像中比较平滑的部分,其灰度值较小,梯度值也较小。严格来讲,图像梯度计算需要求导数,但是图像梯度一般通过计算像素值的差来得到梯度的近似值(近似导数值)下图左图中的A原创 2021-01-15 10:18:28 · 1517 阅读 · 0 评论 -
第9章 图像梯度 -- 9.2 Scharr 算子
相关链接:Sobel 算子Laplacian 算子 (拉普拉斯算子)Scharr 算子Scharr 算子 和 Sobel算子Scharr 算子相对Sobel算子而言,具有更高的精度Scharr 算子函数原型:dst_img = cv2.Scharr(src_img, ddepth, dx, dy, scale, delta)参数:dst_img:结果图像src_img:原始图像ddepth:输出图像的深度,dx:x方向上的求导阶数,值为0时,表示在该方向上没有求导原创 2021-01-15 11:05:33 · 166 阅读 · 0 评论 -
【opencv】第9章 图像梯度 -- 9.3 Laplacian 算子
上面的式子,用在图像里,可以看作是 上、下、左、右点的求和,减去中心点的4倍。所以,对图像做拉普拉斯变换,可以看作是 用原图像 与下面的模板做卷积运算,下面的这个模版(mask 或叫做 filter)也就是拉普拉斯算子了。因为在求一阶偏导函数的时候,我们是通过 x+1 的形式来近似求 x点 的偏导的,直观上来讲,有点偏右了,所以在求二阶导函数的时候,我们让。以上的拉普拉斯变换公式,应用在连续的函数中,我们应该都会求解的,但是在图像这个离散的二维环境中,怎么做拉普拉斯变化呢,具体怎么计算呢?原创 2021-01-15 11:15:49 · 963 阅读 · 0 评论 -
第10章 Canny边缘检测 -- Canny边缘检测基础
《OpenCV 轻松入门 面向Python》 学习笔记Canny边缘检测基础函数原型:edges = cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)参数:edges:计算得到的边缘图像image:原始taxingthreshold1:处理过程中的第一个阈值(maxVal)threshold2:处理过程中的第 二个阈值(minVal)apertureSize:Sobel 算子的孔径大小L2gradie原创 2021-01-16 19:45:37 · 890 阅读 · 1 评论 -
第11章 图像金字塔 -- 下采样cv2.pyrDown() , 上采样cv2.pyrUp()
《OpenCV 轻松入门 面向Python》 学习笔记cv2.pyrDown()函数cv2.pyrDown() 用于实现高斯金字塔中的下采样。函数原型:dst_img = cv2.pyrDown(src_img, dstsize)参数:dst_img:目标图像src_img:原始图像dstsize:目标图像大小。 默认行和列都会变成原始图像行和列的1/2, 整幅图像会变成原始图像的1/4。cv2.pyrDown()函数首先对原始图像进行高斯变换,再通过抛弃偶数行和偶数列实现下采样。原创 2021-01-17 10:57:57 · 5051 阅读 · 2 评论 -
第12章 图像轮廓 -- 12.1 查找图像轮廓 cv2.findContours(),绘制图像轮廓 cv2.drawContours()
《OpenCV 轻松入门 面向Python》 学习笔记边缘:上一章学习的边缘检测。边缘检测虽能过检测出边缘,但边缘不是连续的,检测到的边缘并不是一个整体。轮廓:图像轮廓是指将边缘连接起来形成一个整体,用于后续的计算。opencv 提供了查找图像轮廓的函数 cv2.findContours(),和绘制图像轮廓的函数cv2.drawContours()。查找图像轮廓 cv2.findContours()...原创 2021-01-18 05:06:35 · 627 阅读 · 0 评论 -
第12章 图像轮廓 -- 12.2 矩特征
《OpenCV 轻松入门 面向Python》 学习笔记比较两个轮廓的最简单的方法就是比较二者的轮廓矩。矩信息包含了对应对象不同类型的几何特征: 大小,位置,角度,形状等。1. 矩的计算 moments 函数函数 cv2.moments() 获得的轮廓特征称为"轮廓矩"。函数原型:retval = cv2.moments(array[,binaryImage])参数 :array : 可以为点集也可以为二值图像(不过无论什么都会被当作轮廓处理)binaryImage : 该参数为True原创 2021-01-21 11:43:19 · 524 阅读 · 0 评论 -
第12章 图像轮廓 -- 12.3 Hu矩
《OpenCV 轻松入门 面向Python》 学习笔记Hu矩Hu矩是归一化中心矩的线性组合,Hu矩再图像旋转,缩放,平移等操作后,仍能保持矩的不变性,经常使用 Hu 矩来识别图像的特征。在 OpenCV 中,使用函数 cv2.HuMoments()可以得到 Hu 距。该函数使用 cv2.moments()函数的返回值作为参数,返回 7 个 Hu 矩值。矩函数 cv2.HuMoments()函数原型:hu = cv2.HuMoments( m )hu 表示返回的Hu 矩阵参数m 是cv2.原创 2021-01-21 13:09:15 · 516 阅读 · 7 评论 -
第12章 图像轮廓 -- 12.4 轮廓拟合
《OpenCV 轻松入门 面向Python》 学习笔记计算轮廓时,可能不需要实际的轮廓,而仅需要一个接近于轮廓的近似多边形,Opencv中提供了多种计算轮廓近似多边形的方法。轮廓拟合1. 矩形包围框 cv2.boundingRect()2. 最小包围矩形框 cv2.minAreaRect()3. 最小包围圆形 cv2.minEnclosingCircle()4. 最优拟合椭圆 cv2.fitEllipse()5. 最优拟合直线 cv2.fitLine()6. 最小外包三角形 cv2.min原创 2021-01-21 15:12:09 · 808 阅读 · 0 评论 -
第12章 图像轮廓 -- 12.5 凸包,利用形状场景算法比较轮廓,轮廓的特征值
《OpenCV 轻松入门 面向Python》 学习笔记retval = cv2.isContourConvex( contour ) 返回值 retval 是布尔值,True表示轮廓是凸的contour 是判断的轮廓原创 2021-01-23 09:44:08 · 525 阅读 · 2 评论 -
第13章 图像轮廓 --直方图处理
《OpenCV 轻松入门 面向Python》 学习笔记import cv2import matplotlib.pyplot as plto = cv2.imread("/Users/manmi/Documents/GitHub/open_cv/源代码及图像/chapter13/image/girl.bmp")hist_b = cv2.calcHist([o], [0], None, [256], [0, 255])hist_g = cv2.calcHist([o], [1], None, [2原创 2021-01-27 08:15:04 · 174 阅读 · 0 评论 -
【opencv】第14章 傅立叶变换
傅立叶变换原创 2021-01-31 11:15:41 · 196 阅读 · 0 评论 -
【opencv】18、视频操作
视频的基本操作:创建对象,视频读取,对象释放,视频属性获取/设置,视频保存原创 2022-10-09 23:04:15 · 3686 阅读 · 0 评论 -
第19章 绘图及交互
《OpenCV 轻松入门 面向Python》 学习笔记OpenCV绘图及交互绘画基础绘制直线数 cv2.line()绘制矩形 cv2.rectangle()绘制圆 cv2.circle()绘制椭圆 cv2.ellipse()绘制多边形 cv2.polylines()在图像内添加文字 cv2.putText()绘画基础OpenCV提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数 cv2.circle()、绘制椭圆的函数 cv2.ellipse()、原创 2021-01-23 10:28:36 · 167 阅读 · 0 评论 -
第20章 K近邻算法
《OpenCV 轻松入门 面向Python》 学习笔记相关链接: opecv入门:K近邻算法1. 用python 编写 k近邻算法import cv2import numpy as npnum = 100row = 240col = 240a = np.zeros((num, row, col))# print(a.shape)n = 0for i in range(0, 10): # 数字 i for j in range(1, 11): # 数原创 2021-02-06 16:30:53 · 152 阅读 · 0 评论 -
第21章 支持向量机 SVM
《OpenCV 轻松入门 面向Python》 学习笔记关键代码:svm = cv2.ml.SVM_create()result = svm.train(data, cv2.ml.ROW_SAMPLE, label)(p1, p2) = svm.predict(test_data)举例:import numpy as npimport cv2import matplotlib.pyplot as plt# 生成训练数据a = np.random.randint(95, 100, (20原创 2021-02-05 22:46:35 · 139 阅读 · 0 评论 -
第22章 K均值聚类
《OpenCV 轻松入门 面向Python》 学习笔记函数原型:retval, bestLabels, centers=cv2.kmeans(data, K, bestLabels, criteria, attempts, flags)参数:data 输入的待处理数据集合,应该是 np.float32 类型,每个特征放在单独的一列中。K 分出的簇的个数,就是分类的个数,一般就是 K =2 表示二分类。bestLabels 表示计算后各个数据点最终分类标签(索引),实际调用时,设置为None。原创 2021-02-06 20:19:35 · 206 阅读 · 0 评论 -
【Opencv】函数大全
1、cvLoadImage:将图像文件加载至内存;2、cvNamedWindow:在屏幕上创建一个窗口;3、cvShowImage:在一个已创建好的窗口中显示图像;4、cvWaitKey:使程序暂停,等待用户触发一个按键操作;5、cvReleaseImage:释放图像文件所分配的内存;6、cvDestroyWindow:销毁显示图像文件的窗口;7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件;8、cvQueryFrame:用来将下一帧视频文件载入内存;9、cvR原创 2021-02-06 09:53:24 · 451 阅读 · 0 评论 -
【opencv】Opencv中数据类型CV_8U, CV_16U, CV_16S, CV_32F、CV_64F
CV_8U, CV_16U, CV_16S, CV_32F、CV_64原创 2022-09-20 13:11:17 · 4433 阅读 · 1 评论 -
【opencv】高斯核是怎么通过参数ksize和sigma计算得到的 cv2.getGaussianKernel(),cv.GaussianBlur()
cv2.getGaussianKernel 函数只能生成一维高斯核, shape为(n, 1)可以通过 kernel_x * kernel_y.T 生成二维高斯核下面通过例子,生成二维高斯核,包括通过 opencv的cv2.getGaussianKernel 函数,我们自己手撸的高斯核函数代码,最后检测,我们自己的代码得出的结果是否等于cv2.getGaussianKernel 函数生成的结果import cv2import numpy as npimport math# 默认高斯.原创 2021-02-18 11:26:42 · 10791 阅读 · 5 评论