opencv-python
文章平均质量分 60
python版本opencv算法、功能详解及理论实战
RayChiu_Labloy
研究领域:人工智能、工业互联网
展开
-
opencv-Python 目标跟踪(一)《Meanshift算法、Camshift算法》
Meanshift算法meanShift,均值漂移,在聚类、图像平滑、分割、跟踪等方面有着广泛的应用,其最初的含义正如其名:偏移的均值向量;但随着理论的发展,meanShift的含义已经发生了很多变化。如今,我们说的meanShift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,然后以此为新的起始点,继续移动,直到满足一定的结束条件。Meanshift算法原理:假设你有一堆点集,例如直方图反向投影得到的点集。还有一个小的窗口,这个窗口可能是圆形的...原创 2021-09-22 14:37:31 · 1530 阅读 · 0 评论 -
opencv-python 详解直方图均衡(二)《再详细介绍直方图以及OpenCV中提供的函数使用》
目录OpenCV中直方图相关函数使用:OpenCV中获取直方图的函数calcHist()和其参数解释:使用Matplotlib绘制直方图:第一种方式,第二种方式,效果:直方图均衡化的三种情况,分别是:自适应直方图均衡化:OpenCV中直方图相关函数使用:OpenCV中获取直方图的函数calcHist()和其参数解释:calcHist(images, channels, mask, histSize, ranges[, hist[, accumula...原创 2021-09-18 08:51:03 · 648 阅读 · 0 评论 -
opencv-python 详解图像特征(三)
SIFT和SURF对比:SIFT算法用于检测特征点,SIFT算法对旋转、尺度缩放、亮度变化等保持不变性,对视角变换、仿射变化、噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法。但是其实时性相对不高。SURF(Speeded Up Robust Features)算法改进了特征了提取和描述方式,用一种更为高效的方式完成特征点的提取和描述。SURF算法原理SURF特征检测的步骤尺度空间的极值检测:搜索所有尺度空间上的图像,通过Hessian来识别潜在的对尺度和选择不变...原创 2021-09-05 10:18:47 · 948 阅读 · 1 评论 -
opencv-python 详解图像特征(四)之特征匹配
之前我们讨论过了众多的特征检测算法,这次我们来讨论如何运用相关的方法进行特征匹配 。原创 2021-09-15 15:58:54 · 2909 阅读 · 0 评论 -
opencv-python 实现仿射变换和透视变换
目录仿射变换:透视变换:原理和C++实现请看我的另外一篇文章:https://blog.csdn.net/RayChiu757374816/article/details/120174397仿射变换:原图:测试代码:import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('1.jpg')rows, cols = img.shape[:2]# 变换前的三个点..原创 2021-09-09 09:25:24 · 664 阅读 · 0 评论 -
opencv-python 实现用分水岭算法做图像分割
测试图片:测试代码:import cv2import numpy as npimg = cv2.imread('coins.jpg')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# noise removalkernel = cv2.getStructuringElement(原创 2021-09-09 08:19:39 · 614 阅读 · 0 评论 -
OpenCV4 官方离线文档下载方法
最近经常用到OpenCV4,和OpenCV3还是有些区别的,经常需要查阅文档,在线的不方便,这里分享离线文档下载的方法。官方离线文档下载链接:https://docs.opencv.org/最新的版本是 4.5.3 :直接下载 zip包就可以了,随便点击一个html即可进入文档。...原创 2021-09-06 10:33:42 · 2332 阅读 · 0 评论 -
opencv-python 详解图像特征(二)
SIFT尺度不变特征变换SIFT尺度不变特征变换,之所以称其为尺度不变,是因为其不受图片放缩以及旋转的影响。一些像Harris这样的拐角检测器。它们是旋转不变的,这意味着即使图像旋转了,我们也可以找到相同的角。很明显,因为转角在旋转的图像中也仍然是转角。但是缩放呢?如果缩放图像,则拐角可能不是角。例如,检查下面的简单图像。在同一窗口中放大小窗口中小图像中的拐角时,该角是平坦的,因此,Harris拐角不是尺度不变的。尺度不变特征变换(SIFT)算法提取关键点...原创 2021-09-04 22:13:59 · 892 阅读 · 0 评论 -
opencv-python 测试对比Sobel、Laplacian、canny三种边缘检测
目录原理和定义:常用边缘检测算法相关API:# 索贝尔边缘识别# 拉普拉斯边缘识别# Canny边缘识别实验:原理和定义:物体的边缘检测是物体识别常用的手段。边缘检测常用亮度梯度方法。通过识别亮度梯度变化最大的像素点从而检测出物体的边缘。 详细原理看我另一篇文章:https://blog.csdn.net/RayChiu757374816/article/details/120006432常...原创 2021-09-03 14:36:08 · 504 阅读 · 0 评论 -
opencv-python 详解图像特征(一)
目录什么是图像的特征:常见的图像特征:一些常见的特征:Harris哈里斯角检测:Shi—tomasi拐角检测器什么是图像的特征:可以表达图像中对象的主要信息,并且以此为依据可以从其他未知图像中检测出相似或者相同对象。常见的图像特征:边缘 角点 纹理一些常见的特征:SIFT SURF HOG Haar LBP KAZE AKAZE BRISK图像特征相关的三个任务:Detection特征检测 Description 特征描述...原创 2021-09-03 11:31:42 · 637 阅读 · 0 评论 -
opencv-python 详解图像混合算术运算
图片相加cv2.add()要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度/宽度/通道数)必须相同。 numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):add()两个图片进行加和,大于255的使用255计数.numpy会对结果取256(相当于255+1)的模: import numpy as npimport cv2x = np.uint8...原创 2021-09-02 21:50:29 · 402 阅读 · 1 评论 -
opencv-python 电容负极缺陷检测
喷印区域缺陷检测原创 2021-09-02 13:51:03 · 239 阅读 · 0 评论 -
opencv-python 矫正电容
实验图片:代码:import cv2import numpy as npimport mathimage = cv2.imread('16.bmp')gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)# 大津法阈值分割(因为图片明暗不均)_, thresh = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# # 边缘检测 小于40的不是边缘,大.原创 2021-09-02 13:48:14 · 172 阅读 · 0 评论 -
opencv-python 详解图像的几何变换缩放、平移、旋转、翻转
图像的几何变换缩放、平移、旋转、翻转原创 2021-09-01 12:26:25 · 5075 阅读 · 0 评论 -
小技巧:用画图工具找图像ROI区域坐标用于数字图像处理
当我们想截图某个图像中的某个ROI区域的时候不知道ROI区域的坐标,可以借助画图工具来找坐标。比如李娜的眼睛:我们把李娜拖动到画图工具,此时图像会处于图像的左上角,左上角的坐标为(0,0),和我们opencv读取图像的坐标系方向一致。鼠标放到红色的点可以看到画图工具左下角会显示鼠标位置的坐标(391,310),同理我们可以得到眼睛右下角蓝色点的坐标(443,375) 又因为opencv读取图像后的ndarray对应的值是先y后x,那么我们可以把上...原创 2021-09-01 10:50:22 · 1354 阅读 · 0 评论 -
opencv-python 详解cv2.minAreaRect(cnt)函数返回的Box2D结构
cv2.minAreaRect(cnt)是cv2.findContours()找轮廓函数返回轮廓数组后,绘制每个轮廓的最小外接矩形的方法。详解请看我的另两篇文章:https://mp.csdn.net/mp_blog/creation/editor/119903415https://mp.csdn.net/mp_blog/creation/editor/119892630minAreaRect函数返回的是一个叫Box2D 结构,举一个输出的Box2D的例子:((81.0,288),(22.原创 2021-08-31 16:56:26 · 8343 阅读 · 2 评论 -
opencv-python 实现测量针脚角度
测试图片:测试代码:import cv2import numpy as npdef line_detect(image): img = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) # cv2.imshow("img", img) # 阈值分割 取的最低阈值为大于上边计算灰度图像素均值的值 _, thresh = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV).原创 2021-08-31 14:11:55 · 305 阅读 · 0 评论 -
opencv-python 电容底座轮廓形状匹配相似度
测试图片image1和image2:测试代码:import cv2import numpy as npimage = cv2.imread('20.bmp')[250:800, 550:1250] # 取出roi区域gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)# 先高斯模糊 采用7*7大卷积核,过滤大噪声img = cv2.GaussianBlur(gray, (7, 7), 0)# 阈值分割 取的最低阈值为大于上边计算灰度.原创 2021-08-31 10:12:01 · 603 阅读 · 0 评论 -
opencv-python 实现电容底座的面积计算
测试图片:import cv2import numpy as npimage = cv2.imread('20.bmp')[250:800, 550:1250] # 取出roi区域gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)print("像素和***********", np.sum(image))print("最大像素***********", np.max(image))print("最小像素***********", np.m.原创 2021-08-31 09:59:41 · 111 阅读 · 0 评论 -
opencv-python 详解图像梯度、边缘检测
先谈一下边缘检测算法sobel 关于上图图像的边缘,图像中像素灰度值变化没有规律。一种比较好的描述这种变化的方法是采用导数。其中梯度剧烈变化的地方代表图像灰度值变化强烈的地方,也就是边缘。为了更好的说明,以1维图像(也就是图像的1行)为例。边缘出现在灰度值跳变的地方,如下图所示:如果对上面的1维图像求导数,得到下图,可以很明显的看到边缘所在的位置。从上面的解释,我们可以设置一个阈值,根据局部像素变化强烈程度获取图像边缘。...原创 2021-08-30 22:59:51 · 1678 阅读 · 0 评论 -
opencv-python 详解阈值分割
固定阈值分割很直接,一句话说就是像素点值大于阈值变成一类值,小于阈值变成另一类值。原创 2021-08-30 17:35:48 · 2956 阅读 · 0 评论 -
opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
图像增强的定义:是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。在图像增强过程中,不分析图像降质的原因,处理后的图像不一定逼近原始图像。图像增强技术根据增强处理过程所在的空间不同,可分为基于空域的算法和基于频域的算法两大类。基于空域的算法处理时直接对图像灰度级做运算,基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。空域法:对图像中的像...原创 2021-08-27 16:24:44 · 3033 阅读 · 0 评论 -
opencv-python 实现利用灰度值差、个数、均值方差比较图像相似度
import cv2img = cv2.imread('8.jpg')[655:670,465:485]# 转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)print(type(img))# 自动读取出灰度图gray1 = cv2.imread('2.jpg', 0)[575:590,580:600]gray2 = cv2.imread('8.jpg', 0)[655:670,484:504]res = cv2.subtract(gr.原创 2021-08-26 17:55:02 · 2718 阅读 · 2 评论 -
opencv-python 实现角点检测和棋盘角点检测
目录利用goodFeaturesToTrack()角点检测:利用findChessboardCorners()检测棋盘板内角点,cornerSubPix()亚像素精细化检测结果:goodFeaturesToTrack()和findChessboardCorners()区别:利用goodFeaturesToTrack()角点检测:函数的参数说明:def goodFeaturesToTrack(image: Any【输入图像,是八位的或者32位浮点型,单通道图像,所以有时候用灰度图】.原创 2021-08-25 17:39:27 · 6575 阅读 · 1 评论 -
opencv-python 详解轮廓特征和轮廓属性
目录图像矩:凸包及更多轮廓特征:轮廓属性:图像矩:图像矩是对特征进行参数描述的一种算法,包含的特征有颜色特征、纹理特征、形状特征。矩可以理解为图像的各类几何特征。图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述量)来描述整个图像,这组数据月简单越有代表性越好。良好的特征不受光线、噪点、几何形变的干扰,图像识别技术的发展中,不断有新的描述图像特征提出,而图像不变矩就是其中一个。从图像中计算出来的矩通常描述了图像不同...原创 2021-08-25 16:22:49 · 1288 阅读 · 2 评论 -
opencv-python 详解线性和非线性滤波、模糊、卷积原理
关于滤波、模糊和卷积:滤波、模糊都属于卷积,不同滤波方法之间只是卷积核不同(对线性滤波而言) 低通滤波器是模糊,高通滤波器是锐化低通滤波器就是允许低频信号通过,在图像中边缘和噪点都相当于高频部分,所以低通滤波器用于去除 噪点、平滑和模糊图像。高通滤波器则反之,用来增强图像边缘,进行锐化处理。常见噪声有椒盐噪声和高斯噪声,椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白点;高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。谈到了卷积,我们复习一下卷积基础...原创 2021-08-24 13:43:41 · 1083 阅读 · 0 评论 -
opencv-python 实现用霍夫圆变换找圆心坐标
实验图片:效果:代码:# 加载环境包import cv2import numpy as np# 图片简单处理img = cv2.imread('00.jpg') # 读取图片GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度化GrayImage = cv2.medianBlur(GrayImage, 5) # 中值模糊"""阈值处理,输入图片默认为单通道灰度图片 threshold()为固定阈值二值化.原创 2021-08-23 17:09:19 · 5275 阅读 · 14 评论 -
opencv-python 实现轨迹栏作为HSV空间图片调色板
测试图片:代码:import cv2 as cv2import numpy as nppanel = np.zeros([100, 700], np.uint8)cv2.namedWindow('panel')def nothing(x): passcv2.createTrackbar('L - h', 'panel', 0, 179, nothing)cv2.createTrackbar('U - h', 'panel', 179, 179, nothing).原创 2021-08-23 16:30:49 · 463 阅读 · 0 评论 -
opencv-python 实现边缘检测+霍夫线变换测量边缘角度
测试图片测试代码:import cv2import numpy as np def line_detect(image): # 1.加载图片,转为二值图, 绘制轮廓 gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) # 把输入图像灰度化 ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC) # cv2.imshow("thresh", .原创 2021-08-23 10:52:41 · 1164 阅读 · 0 评论 -
opencv-python 实现截取图片中的多边形、圆形区域
原图:多边形(圆形)边缘坐标文件:截取的效果:代码:import cv2import numpy as np# 第一步 将圆形边缘坐标文件里的坐标整理一下data = []with open("1.mks", "r") as f: # 打开文件 data_list = f.readlines()[1:] # 读取文件 for val in data_list: vals = val.split(" ") dat...原创 2021-08-23 10:38:08 · 5731 阅读 · 3 评论 -
opencv-python 详解基于形态学的图像腐蚀和膨胀、开闭运算操作
数字图像处理常用形态学操作:腐蚀膨胀,开运算和闭运算。一、本文目标 了解形态学操作的概念 搞清楚膨胀、腐蚀、开运算和闭运算等形态学操作 OpenCV函数: cv2.erode() , cv2.dilate() , cv2.morphologyEx() 二、详解形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构。而我们图像处理中指的形态学,往往表示的是数学形态学。下面一起来了解数学形态学的概念。数学形态学...原创 2021-08-19 10:06:24 · 994 阅读 · 0 评论 -
opencv-python 详解霍夫线变换
应用场景:找出二值图中的直线基本原理:笛卡尔坐标系内,两个点可以确定一条线 y = k*x + q霍夫空间变换是一种非常简单的变换,其实就是直线方程y=kx+q的另一种写法:图像空间:y=kx+q (变量是y和x) 霍夫空间:q=-xk+y(变量是q和k)变换后的空间成为霍夫空间。即:笛卡尔坐标系中一条直线,对应霍夫空间的一个点。反过来同样成立(霍夫空间的一条直线,对应笛卡尔坐标系的一个点):笛卡尔坐标系中两个点对应霍夫空间两条线如果笛卡尔坐标系三个点共线,对应.原创 2021-08-18 17:11:58 · 778 阅读 · 0 评论 -
opencv-python实现画图工具功能
首先研究一下鼠标控制相关的函数知识,使用鼠标控制画笔的函数:cv2.setMouseCallback(windowName,MouseCallback,param=None)三个参数分别为窗口名称、鼠标响应回调函数、响应函数传递的的参数其中第二个参数为回调函数,MouseCallback(int event, int x, int y, int flags, void *userdata)各参数为:鼠标的event事件、鼠标的x坐标、鼠标的y坐标、鼠标的flags事件、可选参...原创 2021-08-16 15:19:35 · 494 阅读 · 0 评论 -
opencv-python基础之画图
画线line()画矩形框rectangle()画圆circle()画椭圆ellipse()画多边形polylines()写字putText()样例代码:# -*- coding:utf-8 -*-import cv2import numpy as np# 创建一个黑色幕布img=np.zeros((512,512,3), np.uint8)# 画线 img是要操作的图片,start和end是画线的两端点,color是线的颜色,thickness是线的粗细程度cv2.li原创 2021-08-15 20:51:08 · 362 阅读 · 0 评论 -
opencv-python 实现视频和摄像头中取帧
从视频中:import cv2vc = cv2.VideoCapture('Test.avi') # 读入视频文件c = 1if vc.isOpened(): # 判断是否正常打开 rval, frame = vc.read()else: rval = FalsetimeF = 1000 # 视频帧计数间隔频率while rval: # 循环读取视频帧 rval, frame = vc.read() if (c % timeF == 0):原创 2021-07-27 13:53:42 · 1781 阅读 · 0 评论 -
opencv-python 实现颜色检测
参考:https://www.jb51.net/article/206173.htm可用于实现倒车辅助标记检测的功能,倒车辅助标记颜色已经确定了,所以不需要使用深度学习的方法,那样成本太高了,直接可以使用颜色检测的方法。1.首先需要确定待检测目标的HSV值import cv2img = cv2.imread('l3.png')gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)hsv = cv2.cvtColor(img, cv2.COLOR_BG.原创 2021-07-27 14:18:58 · 4102 阅读 · 0 评论 -
opencv-python 实现均值、高斯、中值、双边滤波
测试图片 :实现代码:import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont__author__ = "sunjingjing"#均值滤波def blur(source): img = cv2.blur(source, (10,10)) cv2img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # cv2和PIL中颜色的h..原创 2021-08-10 09:30:07 · 774 阅读 · 2 评论 -
opencv-python 详解模板匹配matchTemplate
模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。通俗来讲就是利用小图来找大图,可以看作是一种简陋的目标检测方法。它只是将模板图像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的拼图。举例来说,对于以下两张图片(第一张为原图...原创 2021-08-11 16:41:18 · 4074 阅读 · 0 评论 -
opencv-python 实现边缘检测+测量物体高度
测试图片:测试代码:import cv2import numpy as npfrom PIL import Image, ImageDraw, ImageFont# 用于给图片添加中文字符def ImgText_CN(img, text, left, top, textColor=(0, 255, 0), textSize=20): if (isinstance(img, np.ndarray)): # 判断是否为OpenCV图片类型 img = Ima.原创 2021-08-12 17:08:30 · 4599 阅读 · 5 评论 -
opencv-python实现图片转视频
首先准备一个图片集的路径,然后定义视频格式,然后遍历图片写入新建的视频文件,代码如下:import random as rdimport cv2 as cvimport osimport numpy as np# 保存视频class RecordMovie(object): def __init__(self, img_width, img_height): self.video_writer = None # 视频对象 self.is_end = False #原创 2021-08-13 14:20:31 · 776 阅读 · 0 评论