OpenCV相关
OpenCV相关
小殊小殊
为人在世 幸遇升平 自当立一番好言 行一番好事业
展开
-
【OpenCV】仿射变换中cv2.estimateAffine2D 的原理
cv2.estimateAffine2D是 OpenCV 库中的一个函数,用于估计两个二维点集之间的仿射变换矩阵。即第一个点集经仿射变换转换到第二个点集需要的操作,包括缩放、旋转和平移。原创 2023-11-20 11:29:38 · 4864 阅读 · 4 评论 -
【OpenCV】计算视频的光流并跟踪物体calcOpticalFlowPyrLK
计算光流可以使用OpenCV的calcOpticalFlowPyrLK方法,cv2.calcOpticalFlowPyrLK是OpenCV库中的一个函数,用于计算稀疏光流。它实现的是Lucas-Kanade方法,这是一种常用的光流计算方法。光流是图像中物体运动的近似表示,它描述了图像中每个像素点在连续两帧之间的移动。Lucas-Kanade方法假设图像中的一个小邻域内的所有像素在运动上是一致的(即具有相同的光流)。原创 2023-11-09 08:30:10 · 2799 阅读 · 0 评论 -
Hough变换原理-直线检测
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。import cv2def HoughLinesP_demo(img_path): img = cv2.imread(img_path) org = img.copy() img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 阈值计算 ret, img = cv2.threshold(img, ..原创 2022-05-25 08:56:19 · 12938 阅读 · 7 评论 -
OpenCV 模板匹配
下面的代码是在img中找templateimport cv2 def get_sing_loc(img, template): ''' methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR', 'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED'] :return.原创 2022-03-19 07:22:22 · 19503 阅读 · 0 评论 -
python 图片打水印 透明图片合并
下面的例子是将img2作为水印打到bg上,注意:img2是一个背景透明的pngimport cv2from PIL import Imagedef merge_image(bg, img2, top_left): # 打开背景 bg = Image.fromarray(bg.astype('uint8')).convert('RGB') # 创建底图 target = Image.new('RGBA', (bg.size[0], bg.size[1]), (0,原创 2022-03-09 12:32:28 · 19037 阅读 · 0 评论 -
OpenCV读取视频、存储视频、跳帧、分辨率、总帧数
OpenCV读取视频、存储视频、跳帧、分辨率、总帧数原创 2021-12-22 08:09:57 · 4265 阅读 · 1 评论 -
python计算线段角度
返回值范围0-360def angle(x1, y1, x2, y2): if x1 == x2: return 90 if y1 == y2: return 180 k = -(y2 - y1) / (x2 - x1) # 求反正切,再将得到的弧度转换为度 result = np.arctan(k) * 57.29577 # 234象限 if x1 > x2 and y1 > y2: .原创 2021-10-29 16:37:40 · 2603 阅读 · 0 评论 -
OpenCV与二进制文件互相转换
一、硬盘读取二进制文件# 二进制转numpywith open(image_path, "rb") as file: jpg_bin = file.read() image = cv2.imdecode(np.asarray(bytearray(jpg_bin),dtype='uint8'), cv2.IMREAD_COLOR) # numpy转二进制with open(tmp_image_path, 'wb') as tmp_file: tmp_jpg_bin原创 2021-09-22 14:30:27 · 948 阅读 · 0 评论 -
OpenCV读取保存中文路径的图片
cv2是不能直接读取带有中文目录的图片,如果要读取中文目录的图片得借助numpyimport cv2import numpy as npimg_filename = "xx.jpg"读取src = cv2.imdecode(np.fromfile(img_filename, dtype=np.uint8), -1)保存savePath = "zz.jpg"cv2.imencode(".jpg", src)[1].tofile(savePath)...原创 2021-08-20 10:40:46 · 442 阅读 · 0 评论 -
OpenCV图像运动模糊
def motion_blur(img, degree=10, angle=20): image = img.copy() # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高 M = cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1) motion_blur_kernel = np.diag(np.ones(degree)) motion_blur_kernel = .原创 2021-08-18 11:22:15 · 1465 阅读 · 0 评论 -
【OpenCV】将图片黑色背景变成透明背景
tmp = cv2.cvtColor(crop_image, cv2.COLOR_BGR2GRAY)_, alpha = cv2.threshold(tmp, 0, 255, cv2.THRESH_BINARY)b, g, r = cv2.split(crop_image)rgba = [b, g, r, alpha]dst = cv2.merge(rgba, 4)# 注意保存成png格式!!!jpg的话还是黑色背景(255)cv2.imwrite("test.png", dst)...原创 2021-08-10 10:55:51 · 5851 阅读 · 1 评论 -
OpenCV图像质量
cv2.imwrite(target_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])原创 2021-07-17 15:35:16 · 236 阅读 · 1 评论 -
有史以来最全的图像相似度算法
使用四种方法计算图片相似度:MD5、直方图、PSNR、SSIM原创 2021-07-16 10:20:46 · 29974 阅读 · 1 评论 -
OpenCV直方图
OpenCV直方图原创 2021-06-24 21:51:09 · 153 阅读 · 2 评论 -
OpenCV图像轮廓
OpenCV图像轮廓原创 2021-06-24 21:45:56 · 107 阅读 · 0 评论 -
OpenCV图像金字塔
OpenCV图像金字塔原创 2021-06-24 11:18:33 · 91 阅读 · 0 评论 -
OpenCV图像梯度算子
梯度简单来说就是求导。 OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian。Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。1 Sobel 算子和 Scharr 算子Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。 你可以设定求导的...转载 2021-06-23 22:50:06 · 473 阅读 · 0 评论 -
OpenCV形态学转换
1.腐蚀就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然 是白色)。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。 这回产生什么影响呢?根据卷积核的大小靠近前景的所有像素都会被腐蚀掉(变为 0),所以前景物体会变小,整幅图像的白色区域会减少。这对于去除白噪声很有用,也可以用来断开两个连在一块的物体等。 这里我们有一个例子,使用一个 5x5 的...转载 2021-06-23 22:32:11 · 121 阅读 · 0 评论 -
OpenCV图像模糊(图像平滑)
使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界)。OpenCV 提供了四种模糊技术。 1.平均这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平 均值来代替中心元素。可以使用函数 cv2.blur() 和 cv2.boxFilter() 来完这个任务。我们需要设定卷积框的宽和高。下面是一个 3x3 的归一化卷积框:注...转载 2021-06-23 22:06:29 · 1162 阅读 · 0 评论 -
OpenCV图像阈值
1.简单阈值与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素 赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阈值。第三个参数 就是当像素值高于(有时是小于)阈值时应该被赋予的新的像素值。OpenCV 提供了多种不同的阈值方法,这是有第四个参数来决定的。cv2.threshhold(src,dst,thresh...原创 2021-06-22 17:50:21 · 914 阅读 · 0 评论 -
OpenCV几何变换
OpenCV 提供了两个变换函数,cv2.warpAffiffiffine 和 cv2.warpPerspective, 使用这两个函数你可以实现所有类型的变换。cv2.warpAffiffiffine 接收的参数是 2 × 3 的变换矩阵,而cv2.warpPerspective 接收的参数是 3 × 3 的变换矩阵。1、平移平移就是将对象换一个位置。如果你要沿(x,y)方向移动,移动的距离 是(tx,ty),你可以以下面的方式构建移动矩阵: ...原创 2021-06-22 16:10:16 · 283 阅读 · 0 评论 -
OpenCV HSV物体跟踪
我们可以利用BGR 转换到 HSV来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间 中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物 体。下面就是就是我们要做的几步: 1.从视频中获取每一帧图像 将图像转换到 HSV 空间 2.设置 HSV 阈值到蓝色范围。 3.获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色 物体周围画一个圈。 下面就是我们的代码:import cv2import numpy as np...原创 2021-06-22 15:34:13 · 287 阅读 · 0 评论 -
三分钟带你快速学习RGB、HSV和HSL颜色空间
在平时工作中,你可能会遇到需要使用不同颜色空间的情况,但是它们到底有什么区别,分别针对什么场景去使用,这篇文章能给你答案,一定要看到最后,保证能让你了如指掌。目录:RGB 的局限性 HSV 颜色空间 HSL 颜色空间 HSV 应用例子 使用 HSV 图像分割RGB 的局限性RGB 是我们接触最多的颜色空间,由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝色(B)。这三种颜色的不同组合可以形成几乎所有的其他颜色。RGB 颜色空间是图像处理中最基本、最常用、面向硬件..转载 2021-06-22 15:26:40 · 1910 阅读 · 1 评论 -
OpenCV按位逻辑运算
这里包括的按位操作有:AND,OR,NOT,XOR 等。当我们提取图像的 一部分,选择非矩形 ROI 时这些操作会很有用(下一章你就会明白)。下面的 例子就是教给我们如何改变一幅图的特定区域。 我想把 OpenCV 的标志放到另一幅图像上。如果我使用加法,颜色会改 变,如果使用混合,会得到透明效果,但是我不想要透明。如果他是矩形我可 以象上一章那样使用 ROI。但是他不是矩形。但是我们可以通过下面的按位运 算实现:import cv2import nu...原创 2021-06-22 12:38:30 · 243 阅读 · 0 评论 -
OpenCV图像混合
其实是加法,但是不同的是两幅图像的权重不同,这就会给人一种混 合或者透明的感觉。图像混合的计算公式如下: g (x) = (1 − α) f0 (x) + αf1 (x) 通过修改 α 的值(0 → 1),可以实现非常酷的混合。 现在我们把两幅图混合在一起。第一幅图的权重是 0.7,第二幅图的权重 是 0.3。函数 cv2.addWeighted() 可以按下面的公式对图片进行混合操作。dst = α · img1 + β · img2 + γ这里 γ ...原创 2021-06-22 10:51:25 · 171 阅读 · 0 评论 -
OpenCV为图像扩边(填充)
cv2.copyMakeBorder() 如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder() 函数。这经常在卷积运算或 0 填充时被用到。这个函数包括如下参数: src 输入图像 top, bottom, left, right 对应边界的像素数目。 borderType 要添加那种类型的边界,类型如下 cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要 下一个参数(value)。 ...原创 2021-06-22 10:47:06 · 1359 阅读 · 0 评论