
OpenCv
OpenCv数字图像处理
imxlw00
这个作者很懒,什么都没留下…
展开
-
使用lambda在循环中传参时,参数总为同一个值
当我使用PyQt5时,需要在调用事件时传入参数,于是想到了lambda函数,代码如下: for i, button in enumerate(self.button_dict.values()): button.clicked.connect(lambda: self.click_checkbox(i))此时i都是同一个值。lambda函数(或称闭包)传递的不是参数的值,而是参数的物理地址,所以lambda传递的参数都会是同一个值。想要解决可以使用functools模块。解决方案原创 2022-04-28 13:29:51 · 623 阅读 · 0 评论 -
人脸识别 face_recognition
导入face_recognition模块import face_recognitionload_image_file 加载图像调用face_recognition.load_image_file()读入图像。输出图像是rgb格式(opencv中是bgr格式)import face_recognitionimage = face_recognition.load_image_file("../datas/obama.jpg")face_locations 人脸检测能定位所有图像中识别出的人原创 2021-08-26 10:49:39 · 1117 阅读 · 0 评论 -
VS2019 OpenCV3.4.11 整合
1. OpenCV下载及安装解压缩到你想安装的文件夹。环境变量工程配置打开项目工程属性,需要添加工程要用到的头文件、库文件。选择平台添加头文件路径添加库目录链接库的配置相应的库文件名可以去OpenCV文件的build/x64/vc15/lib下查找测试#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;int main(int argc, char** arg原创 2021-06-18 10:38:28 · 120 阅读 · 0 评论 -
图像数字处理 100问 pyqt5版
主界面问题 1-10问题 11-20原创 2021-06-14 19:49:49 · 242 阅读 · 2 评论 -
OpenCV pyqt5 版
主界面图像几何变换图像二值化原创 2021-06-10 16:49:42 · 334 阅读 · 2 评论 -
OpenCV-Python图像平滑处理
理论基础在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程称为对图像的平滑处理,所得的图像称为平滑图像。图像平滑处理的基本原理是,将噪声所在像素点的像素值处理为其周围临近像素点的值的近似值。取近似值的方式很多,主要包括:均值滤波方框滤波高斯滤波中值滤波双边滤波2D 卷积(自定义滤波)均值滤波均值滤波是指用当前像素点周围 N·N 个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。例如,希望对图中位于第 5 行第 5 列的原创 2021-01-21 17:31:17 · 1067 阅读 · 1 评论 -
OpenCV-Python图像透视
仿射变换可以将矩形映射为任意平行四边形,透视变换则可以将矩形映射为任意四边形。透视变换通过函数 cv2.warpPerspective()实现,该函数的语法是:dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]] )使用函数 cv2.getPerspectiveTransform()生成转换矩阵,其语法格式为:retval = cv2.getPerspectiveTransform( src, d原创 2021-01-21 16:49:07 · 361 阅读 · 0 评论 -
OpenCV-Python图像仿射变换
OpenCV 提供了函数 cv2.getAffineTransform()来生成转换矩阵 M。retval=cv2.getAffineTransform(src, dst) src 代表输入图像的三个点坐标。 dst 代表输出图像的三个点坐标。src 和 dst 中的三个点分别对应平行四边形的左上角、右上角、左下角三个点函数 **cv2.warpAffine()**以函数 cv2.getAffineTransform()获取的转换矩阵 M 为参数,将 src 中的点仿射到 dst 中。imp原创 2021-01-21 16:36:06 · 706 阅读 · 0 评论 -
OpenCV-Python图像傅里叶变换opencv实现
OpenCV为此提供了cv.dft()和cv.idft()函数。它返回与前一个相同的结果,但是有两个通道。第一个通道是结果的实部,第二个通道是结果的虚部。输入图像首先应转换为np.float32。傅里叶变换import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('images/lena.jpg',0)img_float32 = np.float32(img)cv2.imshow("img",im原创 2021-01-21 11:46:19 · 318 阅读 · 0 评论 -
OpenCV-Python图像傅里叶变换Numpy实现
理论基础图像处理一般分为空间域处理和频率域处理。空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰度变换和空间滤波两种形式。灰度变换是对图像内的单个像素进行处理,比如调节对比度和处理阈值等。空间滤波涉及图像质量的改变,例如图像平滑处理。空间域处理的计算简单方便,运算速度更快。频率域处理是先将图像变换到频率域,然后在频率域对图像进行处理,最后再通过反变换将图像从频率域变换到空间域。傅里叶变换是应用最广泛的一种频域变换,它能够将图像从空间域变换到频率域,而逆傅里叶变换能够将频率域信息变换到空间原创 2021-01-21 11:35:04 · 2826 阅读 · 0 评论 -
OpenCV-Python图像轮廓特征
如何找到轮廓的不同特征,例如面积,周长,质心,边界框等?轮廓面积 area = cv.contourArea(cnt) 轮廓周长 perimeter = cv.arcLength(cnt,True)轮廓近似epsilon = 0.1*cv.arcLength(cnt,True) approx = cv.approxPolyDP(cnt,epsilon,True)外接矩形直角矩形,不考虑物体的旋转。所以边界矩形的面积不是最小的。它是由函数cv.boundingRect()找到的。(原创 2021-01-20 17:53:42 · 229 阅读 · 0 评论 -
OpenCV-Python图像轮廓
轮廓谈起轮廓不免想到边缘,它们确实很像。简单的说,轮廓是连续的,边缘并不全都连续。轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测和识别的有用工具。为了获得更高的准确性,请使用二进制图像。因此,在找到轮廓之前,请应用阈值或canny边缘检测。在OpenCV中,找到轮廓就像从黑色背景中找到白色物体。因此请记住,要找到的对象应该是白色,背景应该是黑色。import numpy as npimport cv2 as cvim = cv.imre原创 2021-01-20 17:26:35 · 342 阅读 · 0 评论 -
OpenCV-Python图像金字塔
图像金字塔是图像中多尺度表达的一种,一幅图像的金字塔是源于同一张原始图,分辨率逐步减少的图像集合。其通过梯次向下采样获得。直到达到某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。层级越高,则图像越小。分辨率越低。有两种图像金字塔。1)高斯金字塔2)拉普拉斯金字塔高斯金字塔中的较高级别(低分辨率)是通过删除较低级别(较高分辨率)图像中的连续行和列而形成的。然后,较高级别的每个像素由基础级别的5个像素的贡献与高斯权重形成。通过这样做,M×N图像变成M/2×N/原创 2021-01-20 15:39:12 · 187 阅读 · 0 评论 -
OpenCV-Python图像Canny边缘检测
Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,即由多个步骤构成。1.图像降噪2.计算图像梯度3.非极大值抑制4.阈值筛选.图像降噪 ,使用高斯滤波器,以平滑图像,滤除噪声。计算图像梯度,得到可能边缘。计算图像中每个像素点的梯度强度和方向。应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。应用双阈值(Double-Threshold)检测来确定真实的和潜在的原创 2021-01-20 11:30:46 · 160 阅读 · 0 评论 -
OpenCV-Python图像梯度 Laplacian算子
拉普拉斯滤波器使用的卷积核: 从图中可以看出当前点的位置与周围4个点位置之差, 即周围四个点之和 - 4*当前位置像素点,这种算法容易受到噪声点的干扰,不存在x和y轴的计算过程P5lap =( P2 + P4 + P6 + P8 ) - 4* P5import cv2img = cv2.imread("images/img2_small.jpg", cv2.IMREAD_GRAYSCALE)laplacian = cv2.Laplacian(img,cv2.CV_64F)laplaci原创 2021-01-20 10:43:47 · 608 阅读 · 0 评论 -
OpenCV-Python图像梯度 Scharr算子
在使用3x3的Sobel算子是精度可能不高,Scharr速度与Sobel算子一样 ,但精度更高函数形式dst = cv2.Scharr( src , ddepth , dx , dy [ , scale [ ,delta [, borderType]]])与Sobel相似少了Ksize参数, 即当Sobel中ksize = -1 时会使用Scharr算子计算。import cv2img = cv2.imread("images/img2_small.jpg", cv2.IMREAD_GRAYSC原创 2021-01-20 10:35:40 · 311 阅读 · 0 评论 -
OpenCV-Python图像梯度 Sobel算子
图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算。 该算子利用局部差寻找边缘将Sobel算子Gx和原始图像卷积可以得到水平方向的像素值变化,与Gy卷积的到垂直方向的像素值变化。将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点。如果要计算P5的水平方向,则需要Sobel算子及P原创 2021-01-20 10:24:50 · 1203 阅读 · 0 评论 -
OpenCV-Python图像形态学
形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了:形态学操作一般作用于二值化图,来连接相邻的元素或分离成独立的元素。腐蚀和膨胀是针对图片中的白色部分!腐蚀腐蚀前景物体的边界。内核滑动通过图像(在2D卷积中)。原始图像中的一个像素(无论是1还是0)只有当内核下的所有像素都是1时才被认为是1,否则它就会被侵蚀(变成0)。根据内核的大小,边界附近的所有像素都会被丢弃。因此,前景物体的厚度或大小减小,或只是图像中的白色区域减小。它有助于去除小的白色噪声。这个核也原创 2021-01-20 09:00:58 · 146 阅读 · 0 评论 -
OpenCV-Python图像阈值
基础理论二进制阈值化反二进制阈值化截断阈值化阈值化为0反阈值化为0代码实现import cv2import matplotlib.pyplot as pltimport numpy as npimg = cv2.imread("./images/img3.jpg")img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret, thresh1原创 2021-01-19 15:21:11 · 109 阅读 · 0 评论 -
OpenCV-Python图像边界填充
cv.copyMakeBorder(img,top, bottom, left, right ,borderType)img:需要填充的图像;top:图像上边界需要填充的像素点;bottom:图像下边界需要填充的像素点;left:图像左边界需要填充的像素点;right:图像右边界需要填充的像素点;borderType:图像填充的方法。图像填充方法BORDER_REPLICATE:复制法,也就是复制最边缘像素。BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例原创 2021-01-19 14:44:27 · 8271 阅读 · 1 评论 -
OpenCV-Python图像加权和
也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉img1 = cv.imread('img1.png')img2 = cv.imread('img2.png')dst = cv.addWeighted(img1,0.7,img2,0.3,0)cv.imshow('dst',dst)cv.waitKey(0)cv.destroyAllWindows()...原创 2021-01-19 09:32:56 · 304 阅读 · 0 评论 -
OpenCV-Python图像掩模
import cv2import matplotlib.pyplot as pltimport numpy as npimage = cv2.imread("./images/lena_small.jpg")print(image.shape)cv2.imshow("src",image)mask=np.zeros(image.shape,dtype=np.uint8)white=(255,255,255)cv2.rectangle(mask,(30,30),(220,220),white原创 2021-01-19 09:02:41 · 611 阅读 · 0 评论 -
OpenCV-Python图像位操作
按位操作包括按位与、或、非、异或 操作import cv2import matplotlib.pyplot as pltimport numpy as np# image = cv2.imread("./images/img2_small.jpg")rectangle = np.zeros((200,200,3),dtype='uint8')white = (255,255,255)cv2.rectangle(rectangle, (15,15), (185,185), white, -1)原创 2021-01-18 21:44:11 · 355 阅读 · 0 评论 -
OpenCV-Python图像算术运算
图像加法使用OpenCV函数cv.add()或通过img1 + img2使两个图像相加。两个图像应具有相同的深度和类型。图像减法使用OpenCV函数cv.subtract()或通过 img1 - img2使两个图像相减。两个图像应具有相同的深度和类型。OpenCV加法运算过程结果若是在0到255之间,结果不变;小于0的为0,大于255的为255OpenCV是饱和运算“+” 的运算过程模运算减法运算过程同加法# 图像加法 255# 200+100 = 3000 => 255pr原创 2021-01-18 21:24:46 · 419 阅读 · 0 评论 -
OpenCV-Python图像裁剪
import cv2import matplotlib.pyplot as pltimport numpy as npimage = cv2.imread("./images/lena.jpg")print(image.shape)cv2.imshow("src",image)img = image[200:300,100:500]cv2.imshow("img",img)cv2.waitKey(0)cv2.destroyAllWindows()原创 2021-01-18 20:35:17 · 400 阅读 · 0 评论 -
OpenCV-Python 绘图
import cv2import matplotlib.pyplot as pltimport numpy as npfrom PIL import Image, ImageDraw, ImageFontdef line(): # 创建黑色的图像 img = np.zeros((300, 300,3), dtype=np.uint8) # 绘制一条厚度为5的蓝色对角线 cv2.line(img,(0,0),(299,299),(255,0,0),5)原创 2021-01-18 17:45:14 · 226 阅读 · 2 评论 -
OpenCV-Python图像处理基础
原文链接http://codec.wang/#/opencv/start/04-basic-operationsimport cv2img = cv2.imread('lena.jpg')读取像素的值通过行列的坐标来获取某像素点的值,对于彩色图,结果是B,G,R三个值的列表,对于灰度图或单通道图,只有一个值:px = img[100, 90]print(px) # [103 98 197]# 只获取蓝色blue通道的值px_blue = img[100, 90, 0]print(原创 2021-01-18 16:54:52 · 395 阅读 · 0 评论 -
OpenCV-Python 图像翻转
镜像翻转图片,使用cv2.flip(src, flipCode)函数其中,参数2 = 0:垂直翻转(沿x轴),参数2 > 0: 水平翻转(沿y轴),参数2 < 0: 水平垂直翻转。import cv2import matplotlib.pyplot as pltimport numpy as npimage = cv2.imread("./images/lena.bmp")print(image.shape)cv2.imshow("src",image)# 垂直翻转img1原创 2021-01-18 16:28:02 · 700 阅读 · 0 评论 -
OpenCV-Python 图像缩放
缩放就是调整图片的大小,使用cv2.resize()函数实现缩放。图像的大小可以手动指定,也可以指定缩放比例。也可使用不同的插值方法。插值方式cv.INTER_NEAREST 最近邻插值cv.INTER_LINEAR 双线性插值cv.INTER_CUBIC 双线性插值cv.INTER_AREA 使用像素区域关系重新采样。它可能是图像抽取的首选方法。通常的,缩小使用cv.INTER_AREA,放缩使用cv.INTER_CUBIC(较慢)和cv.INTER_LINEAR(较快效果也不错)。默认情况原创 2021-01-18 15:45:31 · 3749 阅读 · 0 评论 -
OpenCV-Python 图像旋转
图像旋转角度θ是通过以下形式的变换矩阵实现的:OpenCV提供了函数cv.getRotationMatrix2D 获得图像绕着某一点的旋转矩阵img = cv.imread('m5.jpg',0)rows,cols = img.shape# cols-1 和 rows-1 是坐标限制M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)dst = cv.warpAffine(img,M,(cols,rows))import原创 2021-01-18 15:00:31 · 780 阅读 · 1 评论 -
OpenCV-Python 图像平移
平移是物体位置的移动。创建转换矩阵M位移设为(tx,ty)把数据放入放入np.float32类型的Numpy数组中。使用cv.warpAffine函数完成平移代码实现import numpy as npimport cv2 as cvimg = cv.imread('m5.jpg',0)rows,cols = img.shapeM = np.float32([[1,0,100],[0,1,50]])dst = cv.warpAffine(img,M,(cols,rows))cv.im原创 2021-01-18 11:18:01 · 1287 阅读 · 1 评论 -
OpenCV-Python 图像处理基本操作
读入图片使用函数 cv2.imread(img_path,flag) 读入图像。第一个参数是图像的路径,第二个参数是图像的显示控制。cv2.IMREAD_COLOR:彩色模式读入图像。图像的透明度会被忽略,这是默认参数,也可以传入1。cv2.IMREAD_GRAYSCALE:灰度模式读入图像 ,也可以传入0。cv2.IMREAD_UNCHANGED:包括图像的 alpha 通道,也可以传入-1。import cv2im=cv2.imread("../images/test.png")原创 2021-01-13 20:56:22 · 201 阅读 · 0 评论