OpenCV-Python
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
解决RGB模式下图片的padding(补边框)问题(含代码实现)
首先,说到图片的padding问题,我们知道对于灰度图(channel=1)的图片我们可以之间将其转化为numpy.array,然后利用np.pad(image,((up,down),(left,right)),'constant', constant_values=(255,255))对图像填充边框,而对于RGB模式(channel=3)下的图片,则无法采用该方法进行填充。但有了之前的基础,我们可以采用相同的原理进行填充。即将RGB模式的图片转化为一个三维的数组,然后利用分片技术,分别提取出每一维的数组进转载 2020-08-04 19:54:58 · 761 阅读 · 1 评论 -
opencv中归一化函数cv2.normalize()的原理讲解
本篇文章参考博客:https://blog.csdn.net/kuweicai/article/details/78988886功能:归一化函数参数:Python:cv2.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]])→ dstsrc-输入数组。dst-与SRC大小相同的输出数组。α-...转载 2019-11-09 11:13:54 · 3181 阅读 · 0 评论 -
OpenCV学习笔记-视频文件的读写
定义视频写入类VideoWriter类 必须初始化四个值(文件路径+文件名, 视频编解码器, 帧速率, 帧大小)需要的属性可以通过VideoCapture类的get函数获得视频编解码器:cv.VideoWriter_fourcc('I', '4', '2', '0'):该选项是一个未压缩的YUV颜色编码,是4:2:0色度子采样。这种编码有很好的兼容性,但是会产生较大文件,但会产生较大文件,文件扩展...原创 2018-06-18 22:29:01 · 616 阅读 · 0 评论 -
python+opencv基于图像金字塔实现图像融和
图像金字塔主要涉及两个函数:cv.pyrUp()(图像尺寸变小),cv.pyrDown()(图像尺寸变大,但是会模糊)图像金字塔主要有两个类型:高斯金字塔和拉普拉斯金字塔关于定义和讲解在链接:图像金字塔金字塔图像融和的两个重要作用:1、实现两个图像的无缝连接,就如下面的苹果和橘子2、图像压缩,利用小图形(被高斯金字塔变换后的图像)和几层拉普拉斯金字塔表示大图像信息(拉普拉斯金字塔即使图像很大,由于...原创 2018-06-01 19:15:25 · 1899 阅读 · 0 评论 -
Python+OpenCV实现旋转文本校正
假设我们有一幅图像,图像中的文本被旋转了一个未知的角度。为了对文字进行角度的校正,我们需要完成如下几个步骤:1、检测出图中的文本范围2、计算出文本被旋转的角度3、将图像旋转特定的角度第一步、读取图像,并做二值化处理#读取图像,做二值化处理img = cv.imread('img/imageTextR.png')gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)...原创 2018-06-01 16:43:44 · 11217 阅读 · 1 评论 -
OpenCV学习笔记-几何变换
一、扩展缩放扩展缩放只是改变图像的大小。OpenCV提供函数cv.resize()实现这个功能。在缩放时推荐使用cv.INTER_AREA,在扩展时推荐使用cv.INTER_CUBIC(慢)和cv.INTER_LINEAR。#扩展缩放def resize_demo(img): #使用缩放因子 res = cv.resize(img, None, fx=2, fy=2, inter...原创 2018-06-01 16:22:42 · 607 阅读 · 0 评论 -
python+opencv实现基于傅里叶变换的旋转文本校正
在学习傅里叶变换的过程中,我发现了JohnHany大神的这篇博客:opencv实现基于傅里叶变换的旋转文本校正,所以在学习完傅里叶变换以后,我迫不及待的想要去尝试一下,在此记录一下。在搜索的过程中,我发现网上并没有用python实现的,希望看了这篇文章,能对学习python的小伙伴有帮助。转载请注明出处,原创不易 ---zyh 2018-5-31傅里叶变换的原理,可以看下我的上一篇博客:傅里叶变换...原创 2018-05-31 22:35:21 · 6995 阅读 · 2 评论 -
OpenCV学习笔记-傅里叶变换
速度话不多说,先推荐一下大佬的文章:傅里叶变换详解一、傅里叶变换傅里叶变换可以将一副图片分解为正弦和余弦两个分量,换言之,它可以将一幅图像从空间域(spatial domain)转换为频域(frequency domain)。这种变换的思想是任何函数可以很精确的接近无穷个sin()函数和cos()函数的和。我们来梳理一下概念:空间域一般情况下,空间域的图像是f(x, y) = 灰度级(0-255)...原创 2018-05-31 16:16:41 · 8683 阅读 · 1 评论 -
OpenCV学习笔记-光流
一、光流由于目标对象或者摄像机的移动造成的图像对象在连续两帧图像中的移动被称为光流。它是一个2D向量场,可以用来显示一个点从第一帧图像到第二帧图像的移动。光流是基于以下假设的:1、在连续的两帧图像之间(目标对象的)像素的灰度值不改变2、相邻的像素具有相同的运动具体数学原理参考:https://blog.csdn.net/sophia_tone2w/article/details/51166946,...原创 2018-06-06 21:15:56 · 856 阅读 · 0 评论 -
OpenCV学习笔记-CamShift
CamShift算法的全称是"Continuously Adaptive Mean-SHIFT",即:连续自适应的MeanShift算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针...原创 2018-06-06 20:15:25 · 476 阅读 · 0 评论 -
OpenCV学习笔记-MeanShift
一、原理假设我们有一堆点(比如直方图反向投影得到的点),和一个小的圆形窗口,我们要完成的任务就是将这个窗口移动到最大灰度密度处(也就是点最多的地方)。如下图所示:初始窗口是蓝色的C1,它的圆心为蓝色方框的C1_o,而窗口中所有点质心却是C1_r,很明显圆心和点的质心没有重合。所以移动圆心C1_o到质心C1_r,这样我们就得到了一个新的窗口。这时又可以找到新的窗口内所以点的质心,大多数情况下还是不重...原创 2018-06-06 18:07:59 · 5850 阅读 · 1 评论 -
python+OpenCV+TensorFlow实现人脸识别
一个简单的小demo,不太会用GitHub,所以代码直接贴上来。第一步,获取数据训练集,可以在网上找图集,或者自己生成一些,下面是生成图片的代码,原创 2018-05-30 16:47:21 · 16785 阅读 · 29 评论 -
OpenCV学习笔记-图像分割之GrabCut
一、原理GrabCut是graph cut的改进版,是迭代的graph cut。该算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只要小量的用户交互操作即可得到比较好的分割效果。计算原理参考:点击打开链接,点击打开链接在整个过程发什么了什么呢?1、用户输入一个矩形。矩形外的所有区域肯定是背景。矩形框内的东西是未知的。同样用户确定前景和背景的任何操作都不会被程序改变。2、计算机会对我们的输入图...原创 2018-05-30 15:32:33 · 6311 阅读 · 1 评论 -
OpenCV学习笔记-图像翻转和鼠标操作
函数为flip(src, flipCode, dst=None)flipCode:翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转),flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)在摄像头上应用:import cv2 as cvclicked = Falsedef onMouse(event, x...原创 2018-06-19 09:50:11 · 522 阅读 · 0 评论 -
Python的高级图像处理
构建图像搜索引擎并不是一件容易的任务。这里有几个概念、工具、想法和技术需要实现。主要的图像处理概念之一是逆图像查询reverse image querying(RIQ)。Google、Cloudera、Sumo Logic 和 Birst 等公司在使用逆图像搜索中名列前茅。通过分析图像和使用数据挖掘 RIQ 提供了很好的洞察分析能力。顶级公司与逆图像搜索有很多顶级的技术公司使用 RIQ 来...转载 2019-09-06 11:40:09 · 538 阅读 · 0 评论 -
opencv实现无缝融合--seamless clone
先看效果图:+...转载 2019-08-21 16:33:07 · 1529 阅读 · 0 评论 -
bilateral filter双边滤波器的通俗理解
bilateral filter双边滤波器的通俗理解图像去噪的方法很多,如中值滤波,高斯滤波,维纳滤波等等。但这些降噪方法容易模糊图片的边缘细节,对于高频细节的保护效果并不明显。相比较而言,bilateral filter双边滤波器可以很好的边缘保护,即可以在去噪的同时,保护图像的边缘特性。双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值...转载 2019-08-21 11:44:52 · 1974 阅读 · 0 评论 -
python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective
# usr/bin/env python# coding: utf-8##################### 对图像进行变换(旋转)# 2018年6月17日07:33:54import cv2import numpy as np# 这里说一下旋转的opencv中为旋转提供的三个要素# 旋转的中心点(center)# 旋转角度()# 旋转后进行放缩# 我们可以通过c...转载 2019-08-12 14:32:24 · 991 阅读 · 0 评论 -
怎么扩充图像的边界(python-opencv)
在对图片进行卷积处理的时候,如果卷积模版(卷积内核)过大,且不对原图的边界进行扩充,会导致处理之后得到的图片尺寸变的很小,也就是严重失真。而扩充边界有多种方法,本文就介绍一下这些填充方法。 这是原始图像。 根据图像的边界的像素值,向外扩充图片,每个方向扩充50个像素。 a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_...转载 2019-08-20 11:25:38 · 2591 阅读 · 0 评论 -
python计算图像的局部方差-矩阵计算
方差的计算公式:标准方差公式(2):由标准方差公式2可以得到通过numpy来实现:import numpynarray=numpy.array(nlist)sum1=narray.sum()narray2=narray*narraysum2=narray2.sum()mean=sum1/Nvar=sum2/N-mean**2本想再用滑动窗口计算写...转载 2019-08-19 17:33:51 · 5553 阅读 · 2 评论 -
python -opencv 使用滑动条(调色,画板, cv2.createTrackbar())
python-opencv滑动条的使用- 目标:创建滑动条,把滑动条绑定到opencv窗口- 主要函数:cv2.getTrackbarPos();cv2.creatTrackbar()- 示例:我们创建一个窗口和一个滑动条,通过滑动条来改变窗口的颜色。先介绍一下cv2.creatTrackbar()函数,函数的第一个参数是滑动条的名字,第二个参数是滑动条被放置的窗口的名字,第...转载 2019-08-08 19:16:22 · 2204 阅读 · 0 评论 -
python opencv设置摄像头分辨率以及各个参数的方法
1,为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视频了。但是最后,别忘了停止捕获视频。使用 ls /dev/video*命令可以查看摄像头设备2,cap.read()...转载 2019-08-05 10:56:26 · 9347 阅读 · 0 评论 -
opencv学习——cv2.findHomography()
#第三个参数用于计算单应矩阵的方法。 可以使用以下方法: #0 - 使用所有点的常规方法 #CV_RANSAC - 基于RANSAC的鲁棒方法 #CV_LMEDS - 最少中位数的鲁棒方法 #第四个参数取值范围在1到10,绝一个点对的阈值。原图像的点经过变换后点与目标图像上对应点的误差 #超过误差就认...转载 2019-08-04 14:34:00 · 56842 阅读 · 8 评论 -
python-opencv boundingRect使用注意
矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更小,效果见下图上代码首先介绍下cv2.boundingRect(img)这个函数这个函数很简单,img是一个二值图,也就是它的参数;返回四个值,分别是x,y,w,h;x,y是矩阵左上点的坐标,w,h是矩阵的宽和高然后利用cv2.rectangl...转载 2019-07-31 11:42:21 · 3133 阅读 · 0 评论 -
OpenCV-Python cv2.imdecode()和cv2.imencode() 图片解码和编码
cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。imdecode()使用从网络读取图像数据并转换成图片格式:# -*- coding: utf-8 -*-import num...转载 2019-06-14 09:42:36 · 8634 阅读 · 1 评论 -
OpenCV VideoCapture.get()参数详解
param definecv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。cv2.VideoCapture.get(3) 在视频流的帧的...转载 2018-11-02 11:31:20 · 4922 阅读 · 0 评论 -
安装object detection API环境配置
1,下面记录object detection api工具的安装过程,安装环境为win10准备工作:(1)预先安装tensorflow-gpu-1.9.0, python3.5(2)下载TensorFlow/model文件夹, 新版本存在与GPU的兼容问题,所以不要更新版本(3)在https://github.com/protocolbuffers/protobuf/rele...原创 2018-10-25 18:06:01 · 954 阅读 · 0 评论 -
OpenCV学习笔记-人脸检测
一、人脸检测方法在OpenCV中主要使用了两种特征(即两种方法)进行人脸检测,Harr特征和LBP特征。具体的介绍参考:图像特征提取三大法宝:HOG特征,LBP特征,Haar特征在OpenCV中,使用已经训练好的XML格式的分类器进行人脸检测。在OpenCV-master的data文件夹下。OpenCV-master的下载资源在连接:OpenCV-master上图中文件夹的名字‘harrcasca...原创 2018-05-30 13:00:35 · 609 阅读 · 0 评论 -
OpenCV学习笔记-霍夫变换直线检测
霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提出[53],后于1972年由Richard Duda和Peter Hart推广使用[54],经典霍夫变换用来检测图像中的直线,后来霍...原创 2018-05-24 18:01:05 · 3545 阅读 · 0 评论 -
OpenCV学习笔记-亚像素级精确度的角点-Python版
在学习亚像素级精确度的角点的过程中,我在书中的代码里遇到了几个想不通的地方,在网上百度也都是C++版本的讲解,通过多番查找,总算是弄明白了一点,特此记录一下,以便日后需要时可以回来看看。同时也希望能对学习Python的小伙伴有帮助。转载请注明出处,原创不易----zyh 2018-6-3一、亚像素级精确度的角点如果我们进行图像处理的目的不是用于识别特征点而是进行几何测量,则通常需要更高的精度,而c...原创 2018-06-03 16:40:29 · 7168 阅读 · 3 评论 -
OpenCV学习笔记-轮廓性质
这篇文章我们学习提取一些经常使用的对象特征,不过我并不知道有什么用,如果哪位在生产中用到这些特征,请在评论里说下用处,谢谢大家,一起进步。涉及的特征有:1、边界矩形的宽高比2、轮廓面积与边界矩形面积的比3、轮廓面积与凸包面积的比4、与轮廓面积相等的圆形的直径5、方向6、掩模和像素点7、最大值和最小值以及它们的位置8、平均颜色和平均灰度9、极点...原创 2018-05-27 17:05:00 · 466 阅读 · 0 评论 -
OpenCV学习笔记-直线拟合
Hough 变换可以提取图像中的直线。但是提取的直线的精度不高。而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合。直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法。但是这种方法不适合用于提取图像中的直线。因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的。可实际上,图像中的每个数据点的XY 坐标都是带有噪声的。下面就来讲讲适...原创 2018-05-27 16:05:03 · 3385 阅读 · 0 评论 -
OpenCV学习笔记-轮廓特征
查找轮廓的不同特征,例如面积,周长,重心,边界框等矩:cv.moments()轮廓面积:cv.contourArea()轮廓周长:cv.arcLength()轮廓近似:cv.approxPolyDp()边界矩形:cv.boundingRect()最小外接矩形: cv.minAreaRect() cv.boxPoints()最小外接圆:cv.minEnclosingCircle()椭圆拟合:cv.e...原创 2018-05-26 17:57:34 · 1056 阅读 · 0 评论 -
OpenCV学习笔记-Shi-Tomasi角点检测
一、原理我们知道Harris角点检测的打分公式为: R = λ1λ2 - k(λ1 + λ2)²但是Shi-Tomasi使用的打分函数为: R = min(λ1, λ2)如果打分超过阈值,我们就认为它是一个角点。我们可以把它绘制...原创 2018-06-02 20:28:32 · 5551 阅读 · 0 评论 -
OpenCV学习笔记-Harris角点检测
一、引言:关于兴趣点(interest points)在图像处理和计算机视觉领域,兴趣点(interest points),或称做关键点(keypoints)、特征点(feature points)被大量用于解决物体识别,图像识别、图像匹配、视觉跟踪、三维重建等一系列问题。我们不再观察整幅图,而是选择某些特殊的点,然后对它们进行局部有的放矢的分析。如果能检测到足够多的点,同时它们的区分度很高,并且...原创 2018-06-02 20:05:43 · 6879 阅读 · 0 评论 -
OpenCV学习笔记-物体追踪
读取图像,获得BGR格式的像素值,然后转换成HSV格式,再利用inRange函数进行颜色分离,标记出来HSV的色彩取值范围:H: Hue通道,色调,颜色种类S: Saturation ,饱和度,颜色浓淡V:Value ,明度, 颜色明亮度inRange函数:inRange(src, lowerb, upperb, dst=None)...原创 2018-05-12 16:09:48 · 1199 阅读 · 0 评论 -
OpenCV学习笔记-图像二值化
图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。图像二值化的类型有以下几种:0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为01: THRESH_BINAR...原创 2018-05-15 21:17:09 · 3391 阅读 · 0 评论 -
OpenCV学习笔记-边界矩形
有两类边界矩形,直边界矩形和旋转的边界矩形。直边界矩形:一个直矩形(就是没有旋转的矩形)。它不会考虑对象是否旋转。所以边界矩形的面积不是最小的。使用函数cv.boundingRect()查找得到。(x, y)为矩形左上角的坐标,(w, h)是矩形的宽和高。x, y, w, h = cv.boundingRect(contour)img = cv.rectangle...原创 2018-05-26 11:04:55 · 2763 阅读 · 0 评论 -
OpenCV学习笔记-模板匹配
模板匹配模板匹配就是在整个 图像区域发现与给定子图像匹配的小块区域所以模板匹配首先需要一个模板图像T(给定的子图像)另外需要一个待检测的图像S(源图像)工作方法:在待检测图像上,从左到右,从上到下,计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大匹配算法:TM_SQDIFF: 使用平方差进行匹配,因此最...原创 2018-05-15 20:05:01 · 845 阅读 · 0 评论 -
OpenCV学习笔记-初识轮廓
一、什么是轮廓轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 1、为了更加准确,要使用二值化图像。在寻找轮廓之前,在进行阈值化处理或者canny边界检测。 2、查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。 3、在OpenC...原创 2018-05-25 21:12:54 · 559 阅读 · 0 评论