Opencv
cofisher
这个作者很懒,什么都没留下…
展开
-
用 Opencv 做一件“隐身衣”
文章目录项目介绍实现步骤代码说明1、导入需要的库2、定义绘图函数3、导入前景图片和背景图片4、对两张图片进行水平(镜像)翻转5、将前景图片从 BGR 转换到 HSV 空间6、检测红色区域7、处理红色区域8、融合前景和背景完整代码参考资料项目介绍在这个项目中,我们会使用 Opencv 来将红色物体变成透明状,以此来达到隐身效果,如下面这张动图所示:实现步骤找到一个只含有背景的帧;检测红色物体的位置;将红色区域用背景中的相同区域代替。代码说明我们先用下面这两张图片(前者为背景,后者为前景)原创 2020-07-03 16:31:27 · 647 阅读 · 0 评论 -
使用 OpenCV 将单通道图片转化成多通道图片
项目介绍将一个文件夹下的所有单通道图片转换成每个通道像素值相同的三通道图片。代码实现PATH = r'E:\code\train'image = []for dirname, _, _ in os.walk(PATH): # 遍历 PATH 路径下所有文件夹的路径 if dirname != PATH: # 除去返回的 PATH 文件夹 for each_dirname, _, filename in os.walk(dirname): # each_dirname原创 2020-06-21 13:26:08 · 3263 阅读 · 0 评论 -
OpenCV+Python 让你的朋友出现在《法制进行时》
恶搞朋友的照片,让他们在《法制进行时》露个脸吧!!!原创 2020-06-19 23:37:51 · 346 阅读 · 0 评论 -
用 Python 把你的朋友变成表情包(鼠标事件提取 ROI 版)
在《用 Python 把你的朋友变成表情包》一文中,我们已经实现了朋友到表情包的友好转换。因为有些朋友给我留言觉得在第八个步骤(将一些不需要的黑色区域删除掉)中选定区域那里过于繁琐了,所以在这篇文章的代码中,我们将这一步用调用鼠标事件的方式实现这一步。原创 2020-06-19 21:53:21 · 471 阅读 · 0 评论 -
基于 OpenCV 的车辆检测系统
文章目录项目介绍实现流程代码项目介绍通过此车辆检测系统,我们可以实时判断某时刻内通过摄像头某一区域内的车辆数,如下图所示:实现流程1、提取出一段视频中的每一帧图像;2、使用帧差分技术检测车辆目标;3、图像预处理:3.1 对图像应用阈值处理;3.2 图像膨胀;4、选择车辆检测区域(ROI);5、在 ROI 中寻找车辆轮廓;6、将轮廓绘制到原始帧上得到含有轮廓的每一帧;7、将得到的所有帧合成视频。代码import osimport reimport cv2impor原创 2020-06-18 21:58:15 · 4555 阅读 · 2 评论 -
使用 OpenCV 对车道进行实时检测
项目介绍下图中的两条线即为车道:我们的任务就是通过 OpenCV 在一段视频(或摄像头)中实时检测出车道并将其标记出来。其效果如下图所示:这里使用的代码来源于磐怼怼大神,此文章旨在对其代码进行解释。实现步骤1、将视频的所有帧读取为图片;2、创建掩码并应用到这些图片上;3、图像阈值化;4、用霍夫线变换检测车道;5、将车道画到每张图片上;6、将所有图片合并为视频。代码实现1、导入需要的库import osimport reimport cv2import numpy as原创 2020-06-18 16:31:39 · 5053 阅读 · 5 评论 -
OpenCV 之按位运算举例解析
对- 按位与:bitwise_and();- 按位或:bitwise_or();- 按位异或:bitwise_xor()。- 按位反转:bitwise_not();四个函数进行了举例说明。原创 2020-06-18 16:25:54 · 1363 阅读 · 0 评论 -
用 OpenCV+TensorFlow 和 AI 玩石头剪刀布
用 OpenCV 和 TensorFlow 实现石头剪刀布游戏。原创 2020-06-17 22:21:55 · 985 阅读 · 0 评论 -
用OpenCV检测行人移动方向
项目介绍在此文章中,我们将使用 python 中的 opencv 库创建一个运动热图,用于检测物体或人的流动方向。输入:一段包含行人运动的视频文件。输出:运动热图视频,其中的一帧如下图所示:实现流程这个程序是基于一种被称为高斯背景差法的技术,这项技术被广泛应用于用稳定的摄像机检测运动物体。背景差法创建一个表示帧(图像的静态部分)背景的模板,对于每一帧,它将减去前一帧。其主要步骤只有两个:背景初始化:在第一步中,通过冻结第一帧来计算背景的模型;更新:在第二步中,下一帧将减去上一帧,如果两原创 2020-06-17 13:29:59 · 2796 阅读 · 11 评论 -
用 Python 把你的朋友变成表情包
文章目录项目说明实现步骤Python 实现1、导入需要的库2、绘图函数3、导入前景照片4、等比例缩放前景照片5、对前景照片进行二值化处理6、提取出感兴趣区域7、旋转图片8、将一些不需要的黑色区域删除掉9、导入背景图片10、组合两张图片成表情包11、在表情包下面添加文本11.1 添加英文文本11.2 添加中文文本12、保存表情包完整代码项目说明在日常生活中,我们经常会存取一些朋友们的丑照,在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片。效果如下图所示: 实现步骤原创 2020-05-23 19:03:43 · 12988 阅读 · 32 评论 -
Opencv读取图片时的坐标问题
用 opencv 对读取的图像进行编辑时,我们要先知道怎样对图像的坐标进行规定。如果运行以下代码:raw_image = cv2.imread(image_path)raw_image[:200, :300, :] = 0cv2.imshow('raw_image', raw_image)将得到:...原创 2020-05-02 10:26:44 · 3051 阅读 · 0 评论 -
使用Opencv将BGR图转换为RGB时报错
报错信息:error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<...原创 2020-03-05 11:04:08 · 1359 阅读 · 1 评论 -
Opencv之疲劳检测
项目要求在一段视频中,通过检测人眨眼的次数来判断他的疲劳程度。代码实现1、导入工具包from scipy.spatial import distance as distimport numpy as npimport dlibimport cv22、对脸上的部位进行定义在关键点定位的官方文档中,提取68个关键点来表示脸上的部位。其中:第1个点到第17个点:脸颊;第18个点...原创 2020-01-22 12:26:31 · 7218 阅读 · 54 评论 -
Opencv之人脸关键点定位
项目要求在包含(一个或多个)人脸的图片中对脸上的某些部位(嘴巴、眉毛等部位)进行标记。代码实现1、导入工具包import numpy as npimport dlibimport cv22、对脸上的部位进行定义在关键点定位的官方文档中,提取68个关键点来表示脸上的部位。其中:第1个点到第17个点:脸颊;第18个点到第22个点:右边眉毛;第23个点到第27个点:左边眉毛;...原创 2020-01-22 11:47:33 · 7596 阅读 · 1 评论 -
Opencv之多目标追踪(基于Dlib库)
Dlib介绍Dlib是一个包含机器学习算法的C++开源工具包。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。目前Dlib已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。安装Dlib库1、下载whl文件使用于python3.7。Dilb版本为Dlib-19.17。点此获取Dlib-19.17的whl文件提取码: rfh82...原创 2020-01-21 16:00:18 · 3291 阅读 · 5 评论 -
Opencv之多目标追踪
项目要求用opencv中已经实现了的追踪算法对视频中的任意用户指定目标进行追踪。代码实现1、导入视频vs = cv2.VideoCapture('./videos/los_angeles.mp4')2、实例化OpenCV中的多目标追踪器trackers = cv2.MultiTracker_create()3、将opencv已经实现了的追踪算法写入字典方便调用OPENCV_OB...原创 2020-01-21 10:17:14 · 4095 阅读 · 4 评论 -
Opencv之调用DNN模块
opencv中有dnn模块可以用来直接调用深度学习的配置文件。下面,举一个物体识别的例子。举例1、导入工具包import utils_pathsimport numpy as npimport cv22、标签文件处理rows = open("synset_words.txt").read().strip().split("\n")classes = [r[r.find(" ")...原创 2020-01-20 15:42:30 · 2616 阅读 · 0 评论 -
Opencv之光流估计
光流估计定义光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如目标跟踪。特点亮度恒定:同一点随着时间的变化,其亮度不会发生改变。小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数。空间一致:一个场景上邻近的点投影到图像上也是邻近点...原创 2020-01-20 14:46:45 · 1424 阅读 · 0 评论 -
Opencv之背景建模
定义所谓背景建模,就是将背景识别出来,与前景进行区分的过程。方法背景建模的方法有帧差法和混合高斯模型法,后者的应用更加普遍,而其效果更好,所以在这个案例中,我们使用后者来进行背景建模。混合高斯模型在进行前景检测前,先对背景进行训练,对图像中每个背景采用一个混合高斯模型进行模拟,每个背景的混合高斯的个数可以自适应。然后在测试阶段,对新来的像素进行GMM匹配,如果该像素值能够匹配其中一个高斯...原创 2020-01-20 12:51:47 · 3565 阅读 · 4 评论 -
Opencv之答题卡识别判卷
项目要求提供一张答题卡图像,通过图像处理识别出答题卡上每个题的选项,与正确答案对比,得出分数并写在答题卡上。代码实现过程1、引入需要的库import numpy as npimport cv2 as cv2、定义绘图函数def cv_show(name,img): cv.imshow(name, img) cv.waitKey(0) cv.destroyAl...原创 2020-01-20 10:15:19 · 7913 阅读 · 8 评论 -
Opencv之停车场车位识别(不用类不用函数,一步步实现)
项目要求给出一段停车场的视频,要求实时检测空停车位的数量及位置。思路从这段视频中取出一帧图片。对图片进行处理,只保留图片中的有效信息(停车位)。将所有停车位取出来,分别保存为单独的.jpg文件作为样本(包含空停车位和非空停车位)。训练二分类模型识别此停车位上是否有车。将空停车位在图上标记出来。在视频中实时监测并标记空停车位。实现过程1、引入需要的库import cv2 a...原创 2020-01-19 17:49:02 · 14582 阅读 · 187 评论 -
Opencv之边界填充
函数介绍cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)BORDER_REPLICATE:复制法,也就是复制最边缘像素。BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hg...原创 2020-01-18 17:34:00 · 3029 阅读 · 0 评论 -
Opencv之全景拼接
要求将给定的如下两张图片合并,产生全景拼接的效果。代码实现过程1、导入需要的库import numpy as npimport cv22、创建一个类StitcherStitcher类中包含五个方法,它们分别是stitch(self, images, ratio=0.75, reprojThresh=4.0,showMatches=False)cv_show(self,nam...原创 2020-01-18 14:32:07 · 2188 阅读 · 3 评论 -
Opencv之特征匹配
Brute-Force 蛮力匹配1、导入需要的库import cv2 import numpy as npimport matplotlib.pyplot as plt%matplotlib inline2、定义绘图函数def cv_show(name,img): cv2.imshow(name, img) cv2.waitKey(0) cv2.destro...原创 2020-01-18 12:11:27 · 2193 阅读 · 0 评论 -
Opencv之图像降噪(平滑)
图像降噪(平滑)介绍图像降噪的英文名称是Image Denoising, 是图像处理中的专业术语。现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪,有时候又称为图像去噪。代码实现首先,导入带噪音的图片。img = cv2.imread('lenaNoise.png')img = cv2.cvtCol...原创 2020-01-18 09:42:29 · 8886 阅读 · 0 评论 -
Opencv之图像金字塔--图像融合
图像金字塔通常,我们过去使用的是恒定大小的图像。但是在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,当在图像中搜索某些东西(例如人脸)时,我们不确定对象将以多大的尺寸显示在图像中。在这种情况下,我们将需要创建一组具有不同分辨率的相同图像,并在所有图像中搜索对象。这些具有不同分辨率的图像集称为“图像金字塔”(因为当它们堆叠在底部时,最高分辨率的图像位于顶部,最低分辨率的图像位于顶部时,看...原创 2020-01-17 19:52:46 · 2254 阅读 · 0 评论 -
Opencv之SIFT特征
SIFT介绍SIFT(Scale Invariant Feature Transform)特征是非常稳定的图像特征,在图像搜索、特征匹配、图像分类检测等方面应用十分广泛,但是它的缺点也是非常明显,就是计算量比较大,很难实时,所以对一些实时要求比较高的常见SIFT算法还是无法适用。如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值...原创 2020-01-17 18:11:07 · 2675 阅读 · 0 评论 -
Opencv之Harris角点检测
Harris角点检测的目的是去分辨出图像中的平面、边界以及角点。基本原理下面三张图分别代表平面、边缘以及角点。人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内的图像就可能是一个平面;如果窗口在某一个方...原创 2020-01-17 13:24:58 · 686 阅读 · 0 评论 -
Opencv之OCR识别(扫描后处理)
OCR是指对文本资料进行扫描后对图像文件进行分析处理,获取文字及版面信息的过程。用Opencv进行OCR识别时,通常分为两步:扫描、识别。举例说明:提取下图上的文字信息。扫描再扫描过程中,我们也需要进行三步操作:边缘检测、获取轮廓以及透视变换。Step1: 边缘检测1、导入需要的模块。# 导入工具包import numpy as npimport cv22、读取需要扫描的图片...原创 2020-01-17 10:38:42 · 14227 阅读 · 10 评论 -
Opencv之信用卡数字识别
要求输入一张信用卡的图片,将上面的数字识别出来并写在卡上。即:实现过程1、首先导入相关的模块。# 导入工具包from imutils import contoursimport numpy as npimport argparseimport cv2import myutils # 自己写的py文件,文章结尾会讲2、定义绘图函数。# 绘图展示def cv_show(...原创 2020-01-16 19:01:46 · 1543 阅读 · 1 评论 -
Opencv之图像阈值
图像阈值ret, dst = cv2.threshold(src, thresh, maxval, type)src: 输入图,只能输入单通道图像,通常来说为灰度图dst: 输出图thresh: 阈值maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; ...原创 2020-01-16 18:28:21 · 469 阅读 · 0 评论 -
Opencv之模板匹配
模板匹配原理模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在opencv里有6种,然后将每次计算的结果放入一个矩阵里,作为结果输出。假如原图形是AxB大小,而模板是axb大小,则输出结果的矩阵是(A-a+1)x(B-b+1)。方法cv2.matchTemplate(img, template, methods)参...原创 2020-01-16 18:05:21 · 931 阅读 · 0 评论 -
Opencv之提取图像轮廓
提取图像轮廓cv2.findContours(img,mode,method)mode:轮廓检索模式RETR_EXTERNAL :只检索最外面的轮廓;RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;RETR_TREE(最常用):检索所有的轮廓,并重构嵌套轮廓的整个层次;...原创 2020-01-16 17:14:15 · 15538 阅读 · 5 评论 -
Opencv之图像梯度(边缘)
一、图像梯度梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器: Sobel,Scharr 和 Laplacian。其中Sobel,Scharr 是求一阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化,而 Laplacian 是求二阶导数。1、Sobel算子原理:前一个Sobel矩阵与原始图像A进行卷积操作后得到的是右边的像素值...原创 2020-01-16 16:42:03 · 3118 阅读 · 0 评论 -
Opencv之形态学操作
最基础的形态学操作即腐蚀操作和膨胀操作,在此基础之上,又出现了开运算、闭运算、梯度运算、礼帽与黑帽操作。所有的形态学操作只针对二值图片。腐蚀操作首先,读入一张二值图片。pie = cv2.imread('pie.png')cv2.imshow('pie', pie)cv2.waitKey(0)cv2.destroyAllWindows()腐蚀操作的原理就是求局部最小值的操作,核...原创 2020-01-16 16:01:40 · 579 阅读 · 0 评论 -
Opencv之傅里叶变换
想要了解什么是傅里叶变换的,墙裂推荐这篇文章:傅里叶变换在Opencv中,涉及傅里叶变换的函数主要就是cv2.dft()和cv2.idft(),输入图像需要先转换成np.float32 格式。得到的结果中频率为0的部分会在左上角,通常要转换到中心位置,可以通过shift变换来实现。cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)。im...原创 2020-01-15 15:27:44 · 719 阅读 · 0 评论 -
Opencv之直方图
如上图所示,直方图统计的是一张图片中所含不同像素值的个数,横坐标为像素值,纵坐标为此像素值在图中的个数。如像素值为0的像素点在图中有100个,则在直方图中的第一列对应的纵坐标为100。(如果第一列对应的是0像素值的话)在Opencv中,有专门的函数用来计算每个像素值对应多少像素点:cv2.calcHist(images,channels,mask,histSize,ranges)image...原创 2020-01-15 11:00:09 · 622 阅读 · 0 评论 -
Opencv常用代码总结
读取显示图片cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(10000) cv2.destroyAllWindows()# 可以将其写成一个函数def cv_show(name, img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows()保...原创 2020-01-14 13:54:01 · 913 阅读 · 0 评论