OpenCV3
文章平均质量分 55
OpenCV3
beyond谚语
你只管努力,剩下的交给天意。
展开
-
OpenCV按指定大小分割图像并保存详细讲解
OpenCV按指定大小分割图像并保存详细讲解原创 2023-04-16 14:19:43 · 3651 阅读 · 2 评论 -
二十一、人脸检测
一、识别图像中的人脸haarcascade_frontalface_alt_tree.xmlGitHub上有Haar级联检测器源代码可自行下载,lbp级联检测器也一样有源码可自行下载也一样import cv2 as cvimport numpy as npdef face_detect(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#转成灰度图 face_detector = cv.CascadeClassifier(原创 2022-04-06 11:09:00 · 2903 阅读 · 0 评论 -
二十、分水岭算法
一、基本原理分水岭算法主要是基于距离变换(distance transform),找到mark一些种子点,从这些种子点出发根据像素梯度变化进行寻找边缘并标记分水岭:可以简单的理解成一座山,然后来洪水了,水开始上涨淹没山,慢慢的水位上升,一些海拔低的地方就被淹没。二、基于距离的分水岭分割思路开始—输入图像—转换为灰度图—消除噪声—转换为二值图像—距离变化—寻找种子—生产marker—分水岭变换—输出图像—结束三、代码实现import cv2 as cvimport numpy as npd原创 2022-04-06 10:13:14 · 2298 阅读 · 0 评论 -
十九、图像的形态学操作
一、图像形态学图像形态学是图像处理学科的一个单独分支学科主要针对的是灰度图和二值图像是由数学的集合论以及数学中的拓扑几何原理发展而来二、膨胀操作(dilate)3×3的卷积核以3×3为卷积核从左往右(从上往下)开始运行,若这卷积核内存在1,则用1替代中心元素。最大值取代中心像素白变多,黑变少膨胀的作用:对象大小增加一个像素(3×3)平滑对象边缘减少或者填充对象之间的距离二值图import cv2 as cvimport numpy as npdef dilate(i原创 2022-04-05 22:22:39 · 2952 阅读 · 0 评论 -
十八、对已经找到轮廓的图像进行测量
图像轮廓的获取可参考博文十七一、相关原理1,弧长和面积对于弧长和面积,计算出来的轮廓单位都是像素2,多边形拟合每一个轮廓都是一系列的点,然后通过多边形进行拟合,无限的接近真实形状相关API:cv.approxPolyDP(contour,4, True)其中参数一:contour几何的轮廓参数二:epsilon表示折线的大小,越小表示越接近真实形状参数三:close表示是否为闭合区域,一般默认为True3,几何矩计算前景像素f(x,y)原点矩:p+q=0称为零阶矩,p+q=1称为一原创 2022-04-05 17:54:08 · 2799 阅读 · 0 评论 -
十七、轮廓发现
一、轮廓发现原理轮廓发现是在图像边缘提取的基础上寻找对象轮廓的方法,故边缘提取的阈值的选定会影响到最终轮廓发现的结果。其本质是基于二值图像的,边缘提取常用Canny进行提取边缘轮廓发现也是基于拓扑结构,扫描连通图,最后建立其树形结构的拓扑图通常情况可以利用梯度来避免阈值的错误设定二、代码实现cloneImage,contours,heriachy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)binary:二值图原创 2022-04-05 16:57:21 · 746 阅读 · 0 评论 -
十六、霍夫圆形检测
一、获取圆形检测原理原图如下:选取一个圆的任意点设定为圆形进行绘制圆形,交与一点再将平面直角坐标系上的各点,通过公式转到极坐标上很明显的看出较亮的点为圆心,然后通过半径进行绘制出圆。二、实现步骤由于霍夫圆检测对噪声比较明显,故需要首先对图像进行滤波操作(中值滤波等)霍夫圆形检测是基于图像梯度实现的,分为两步:1,检测边缘,发现可能是圆的圆形2,基于第一步从候选的圆心中开始计算,求出最佳的半径大小三、代码实现cv2.HoughCircles(cimage,cv2.HOUGH_GRADIE原创 2022-04-04 19:05:25 · 5275 阅读 · 0 评论 -
十五、霍夫直线检测
一、自定义import cv2import numpy as npfrom matplotlib import pyplot as pltdef line_detection(image): gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray,50,150,apertureSize=3) lines = cv2.HoughLines(edges,1,np.pi/180,200)原创 2022-04-03 17:18:23 · 109 阅读 · 0 评论 -
十四、Canny边缘提取
一、算法步骤1,对图像进行GaussianBlur(高斯模糊)消除一些噪声2,对图像进行灰度转换cvtColor3,计算梯度Sobel/Scharr4,非最大信号抑制5,高低阈值输出二值图像设定两个阈值T1和T2,凡是高于T2的都保留,凡是低于T1的都舍弃。从高于T2的像素出发,凡是大于T1并且相互连接的都保留。最终得到一个输出二值图像。推荐高低阈值比为T2:T1=3:1或者2:1,其中T2为高阈值,T1为低阈值。二、Canny边缘检测算法cv2.Canny(xgrad,ygrad原创 2022-03-31 15:38:49 · 2998 阅读 · 0 评论 -
十三、图像梯度
一、两种算子一阶导数—Sobel算子水平梯度:垂直梯度:最终图像梯度:二阶导数—Laplacian算子在二阶导数的时候,最大变化处的值为零,即边缘是零值。常见的拉普拉斯算子:、其所有元素之和为零。二、Sobel算子cv2.Sobel(image,cv2.CV_32F,1,0)image为代求的图像;CV_32F为图像的深度(32为float类型),255肯定不够,故选择大点cv2.convertScaleAbs(grad_x)将计算出来的正负数全部转换为正值,然后转换到8位的图像上去原创 2022-03-31 15:03:35 · 1559 阅读 · 2 评论 -
十二、图像金字塔
一、原理reduce=高斯模糊+降采样expand=扩大+卷积PyrDown:降采样PyrUp:还原二、高斯金字塔import cv2import numpy as npfrom matplotlib import pyplot as pltdef pyramid(image): level = 3 temp = image.copy() pyramid_image = [] for i in range(level): dst = cv原创 2022-03-31 12:31:41 · 110 阅读 · 0 评论 -
十一、图像二值化
一、二值图像其实就是把图像转换为只有黑白的两种颜色图像,即像素值非零即一三角阈值二值化对一个图像进行操作,获取图像的直方图,找到波峰和波谷进行连线设为线段A,每个点做有关线段A的垂线垂足在线段A上,最后将所有的垂足的横坐标累加再加上一个偏量位移得到的值也就是图像的阈值,通过这个阈值对整个图像进行二值化操作。二、图像二值化的方法1、全局阈值OTSU:内方差最小,外方差最大(常用)import cv2import numpy as npfrom matplotlib import pyplot原创 2022-03-30 10:29:49 · 1243 阅读 · 0 评论 -
十、模板匹配
一、概念模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。需要首先给定一个模板图像A,和一个待检测图像B。在待检测图像B上,从左往右,从上往下计算待检测图像B和模板图像A所重叠的匹配度,匹配度越高则两者相同的可能性越高。二、公式相关API的实现可以去官网查看具体的源码三、模板匹配import cv2import numpy as npfrom matplotlib import pyplot as pltdef template(): tpl = cv2.imrea原创 2022-03-27 17:12:07 · 529 阅读 · 0 评论 -
九、图像直方图
一、图像直方图的属性说白了就是将图像上的各个颜色通道上的像素点的像素值进行统计,例如:像素值为14的像素点个数有几个,进行显示。图像的像素值取值范围为[0,255],这个范围也成为直方图的range也就是直方图的横坐标轴每一个像素值所对应的个数称之为bin二、对图像进行直方图统计image.ravel()把图像的所有像素点信息进行统计plt.hist(image.ravel(),256,[0,256])将图像信息进行统计,统计成256个bin,范围为[0,255]cv2.calcHist([原创 2022-03-27 15:55:44 · 6375 阅读 · 0 评论 -
八、边缘保留滤波(EPF)
一、概念边缘保留滤波(EPF,edge preserving filtering)二、高斯双边cv2.bilateralFilter(image,0,100,15)100为差异,15为周围的区域import cv2import numpy as npdef bilateralFilter(image): dst = cv2.bilateralFilter(image,0,100,15) cv2.imshow('bilateralFilter',dst)src = cv2原创 2022-03-26 17:41:29 · 922 阅读 · 0 评论 -
七、模糊操作
一、模糊操作基本原理1,基于离散卷积2,定义好每一个卷积核3,不同卷积核得到不同的卷积效果4,模糊是卷积的一种表象二、1*3卷积核举例每次右移一格,进行对应相乘再求和。1*3的卷积核左右两边的元素并没有处理而是照搬下来。卷积核一般都奇数。三、均值模糊对随机噪声有很好的去噪效果1,基于平均值的均值模糊cv2.blur(image,(5,5))需要传入目标图像,定义卷积核大小import cv2import numpy as npdef blur(image): dst原创 2022-03-26 15:42:32 · 449 阅读 · 0 评论 -
六、ROI和泛洪填充
一、ROIROI:region of interest,即感兴趣区域。一般主要通过numpy来获取ROI将某区域转变为灰色图片再覆盖原图像import cv2import numpy as npsrc = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg")cv2.imshow("image",src)roi = src[0:100,0:100]gray = cv2.cvtColor(roi,cv2.COLOR_原创 2022-03-26 12:05:05 · 3300 阅读 · 0 评论 -
五、像素运算
一、相关概念1、算术运算Ⅰ加减乘除Ⅱ调节亮度Ⅲ调整对比度2、逻辑运算Ⅰ与或非Ⅱ遮罩层控制二、图像算术运算(加减乘除均值方差)其中图像的加减乘除需要保证两张图像的大小相同import cv2import numpy as npdef add(src1,src2): dst = cv2.add(src1,src2) cv2.imshow("add",dst) def subtract(src1,src2): dst1 = cv2.subtract(s原创 2022-03-26 09:54:26 · 233 阅读 · 0 评论 -
四、色彩空间
一、色彩空间1、什么是色彩空间?色彩空间是定义的颜色范围。2、常见的色彩空间有哪些?①RGB②HSV在OpenCV中,Hue的值为0~180°,之所以不是360°是因为,8位存不下,故进行归一化操作,使得Hue取值在0 ~180°,可以通过一个字节来存储。③HISHue:色调Intensity:强度Saturation :饱和度④YCrCb主要在早期的人的皮肤检测方面应用⑤YUVAndroid开发中常用,Linux的色彩空间3、色彩空间之间的相互转化import cv2原创 2022-03-24 17:56:43 · 3225 阅读 · 0 评论 -
三、Numpy数组操作
一、对图片各个像素点的像素值进行操作image.shape[0]:image图像的heightimage.shape[1]:image图像的widthimage.shape[2]:image图像的channelsimport cv2import numpy as npdef access_pixels(image): print(image.shape) height = image.shape[0] width = image.shape[1] channe原创 2022-03-24 11:42:24 · 3335 阅读 · 0 评论 -
Anaconda自带Python编译器Jupyter Notebook显示代码行数及常用快捷键
ESC:进入命令行模式;按下H即可显示各种快捷键信息Enter:进入编辑模式方法一:命令方法一、点击代码段,按ESC,使代码段显示蓝色,进入命令行模式二、按下Shift+L,显示代码行数方法二点击VIew,点击Toggle Line NumbersJupyter Notebook快捷键打开Jupyter Notebook,按下Esc进入命令行模式(左边竖条变成蓝色),输入H,快捷键会显示出来...原创 2022-03-24 10:51:40 · 9123 阅读 · 1 评论 -
二、图片加载与保存
一、基本概念1,什么是图片?答:图像是结构化存储的数据信息2,图像的属性答:1、通道数目,2、宽与高,3、像素数据,4、图像类型二、加载显示图像并保存import cv2import numpy as npdef get_image_info(image): print(type(image))# <class 'numpy.ndarray'> print(image.shape)# (150, 110, 3) print(image.size)# 49原创 2022-03-24 10:14:33 · 174 阅读 · 0 评论 -
处理文件、摄像头和图形用户界面
1、基本I/O脚本1.1 读/写图像文件import numpyimport cv2#利用二维Numpy数组简单创建一个黑色的正方形图像img = numpy.zeros((3,3),dtype=numpy.uint8)img#结果为:'''array([[0, 0, 0], [0, 0, 0], [0, 0, 0]], dtype=uint8)''' img.shape#结果为:(3, 3)########################原创 2021-12-31 19:46:40 · 1290 阅读 · 0 评论 -
使用OpenCV3处理图像
1,不同色彩空间的转换OpenCV中有数百种关于在不同色彩空间之间转换的方法。当前,在计算机视觉中有三种常用的色彩空间:灰度、BGR以及HSV(Hue,Saturation,Value)。灰度色彩空间是通过去除彩色信息来将其转换成灰阶,灰度色彩空间对中间处理特别有效,比如人脸检测。BGR,即蓝-绿-红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红三种颜色。网页开发者可能熟悉另一个与之相似的颜色空间: RGB,它们只是在颜色的顺序上不同。HSV, H ( Hue)是色调,S ( Sa原创 2022-01-05 15:01:28 · 2482 阅读 · 1 评论