Python&OpenCV轮廓检测及cv2.threshold,cv2.findContours,cv2.cvtColor,cv2.drawContours函数 2020-05-09 20:27 方法 评论 0 更多详情 对与轮廓检测就是cv2.threshold,cv2.findContours,cv2.cvtColor,cv2.drawContours这几个函数的调用。下面就是代码及对这几个函数的解释: import cv2 import numpy as np img = np.zeros((200,200),dtype = np.uint8 )#构造一个两百行两两百列的矩阵 img[50:150,50:150]= 225 #把50到150行和50到150列赋值为225 # cv2.imshow('img',img) # cv2.waitKey() ret ,thresh = cv2.threshold('img',127,255,0)#选取一个全局阈值,然后就把整幅图像分成了非黑即白的二值图像 ''' cv2.threshold() 函数解释 这个函数有四个参数,第一个原图像,第二个进行分类的阈值,第三个是高于(低于)阈值时赋予的新值,第四个是一个方法选择参数,常用的有: • cv2.THRESH_BINARY(黑白二值) • cv2.THRESH_BINARY_INV(黑白二值反转) • cv2.THRESH_TRUNC (得到的图像为多像素值) • cv2.THRESH_TOZERO • cv2.THRESH_TOZERO_INV 该函数有两个返回值,第一个retVal(得到的阈值值(在后面一个方法中会用到)),第二个就是阈值化后的图像。 ''' image,contours ,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) ''' cv2.threshold函数的解释 参数 第一个参数是寻找轮廓的图像; 第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口): cv2.RETR_EXTERNAL表示只检测外轮廓 cv2.RETR_LIST检测的轮廓不建立等级关系 cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。 cv2.RETR_TREE建立一个等级树结构的轮廓。 第三个参数method为轮廓的近似办法 cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1 cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息 cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法 返回值 cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。''' color =cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)#将灰度图像转化成BGR图像 ''' cvCvtColor(...),是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像。 参数CV_RGB2GRAY是RGB到gray。 参数 CV_GRAY2RGB是gray到RGB。 ''' img = cv2.drawContours(color,contours,-1,(0,255,0),2)#主要用于画出图像的轮廓 ''' cv2.drawContours的参数解释(此例只用了前五个) 其中第一个参数image表示目标图像, 第二个参数contours表示输入的轮廓组,每一组轮廓由点vector构成, 第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓, 第四个参数color为轮廓的颜色, 第五个参数thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部, 第六个参数lineType为线型, 第七个参数为轮廓结构信息, 第八个参数为maxLevel ''' cv2.imshow('contours',color) cv2.waitKey() cv2.destroyAllWindows() ............
cv2.applyColorMap 2020-04-28 12:30 方法 评论 0 更多详情 用途 在图像处理中,伪色彩用途广泛。在OpenCV库中,常见的伪色彩模式都可通过 cv2.applyColorMap(src, userColor[, dst]) 直接调用,很是方便快捷。 cv2.applyColorMap(src, userColor[, dst]) COLORMAP_AUTUMN = 0, COLORMAP_BONE = 1, COLORMAP_JET = 2, COLORMAP_WINTER = 3, COLORMAP_RAINBOW = 4, COLORMAP_OCEAN = 5, COLORMAP_SUMMER = 6, COLORMAP_SPRING = 7, COLORMAP_COOL = 8, COLORMAP_HSV = 9, COLORMAP_PINK = 10, COLORMAP_HOT = 11 ............
cv2.bitwise_and 2020-04-28 11:25 方法 评论 0 更多详情 cv2.bitwise_and()是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0 OutputArray dst = cv2.bitwise_and(InputArray src1, InputArray src2, InputArray mask=noArray()); //dst = src1 & src2 利用掩膜(mask)进行“与”操作,即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除,其余按位操作原理类似只是效果不同而已。 ............
cv2.inRange 2020-04-28 11:20 方法 评论 0 更多详情 hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV) 功能:按hsv颜色取颜色区域 参数有三个: 第一个参数:hsv指的是原图 第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0 第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0 ............
cv2.getStructuringElement 2019-07-10 21:27 方法 评论 0 更多详情 cv2.getStructuringElement( ) 返回指定形状和尺寸的结构元素。 这个函数的第一个参数表示内核的形状,有三种形状可以选择。 矩形:MORPH_RECT; 交叉形:MORPH_CROSS; 椭圆形:MORPH_ELLIPSE; 第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得 getStructuringElement函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。 代码: kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11)) ............
cv2.xfeatures2d.SURF_create 2019-07-02 18:30 方法 评论 0 更多详情 static Ptr cv::xfeatures2d::SURF::create ( double hessianThreshold = 100, int nOctaves = 4, int nOctaveLayers = 3, bool extended = false, bool upright = false ) 参数: hessianThreshold Threshold for hessian keypoint detector used in SURF. nOctaves Number of pyramid octaves the keypoint detector will use. nOctaveLayers Number of octave layers within each octave. extended Extended descriptor flag (true - use extended 128-element descriptors; false - use 64-element descriptors). upright Up-right or rotated features flag (true - do not compute orientation of features; false - compute orientation). ............
svm.predict 2019-06-14 18:04 方法 评论 0 更多详情 predict(samples[,results[,flags]]) 检测样本 参数: samples:样本矩阵 results:结果 flags: ............
svm.train 2019-06-14 17:56 方法 评论 0 更多详情 train(trainData, flags=None): 训练模型 参数: trainData:训练数据 ............
cv2.resize 2019-06-14 15:27 方法 评论 0 更多详情 cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation) 参数解释: InputArray src 输入图片 OutputArray dst 输出图片 Size 输出图片尺寸 fx, fy 沿x轴,y轴的缩放系数 interpolation 插入方式 interpolation 选项所用的插值方法: INTER_NEAREST 最近邻插值 INTER_LINEAR 双线性插值(默认设置) INTER_AREA 使用像素区域关系进行重采样。 INTER_CUBIC 4x4像素邻域的双三次插值 INTER_LANCZOS4 8x8像素邻域的Lanczos插值 ............
sklearn.make_classification 2019-06-11 21:05 方法 评论 0 更多详情 make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None): 参数: n_features :特征个数= n_informative() + n_redundant + n_repeated n_informative:多信息特征的个数 n_redundant:冗余信息,informative特征的随机线性组合 n_repeated :重复信息,随机提取n_informative和n_redundant 特征 n_classes:分类类别 n_clusters_per_class :某一个类别是由几个cluster构成的 weights:列表类型,权重比 class_sep:乘以超立方体大小的因子。 较大的值分散了簇/类,并使分类任务更容易。默认为1 random_state: 如果是int,random_state是随机数发生器使用的种子; 如果RandomState实例,random_state是随机数生成器; 如果没有,则随机数生成器是np.random使用的RandomState实例。 返回值: X:形状数组[n_samples,n_features] 生成的样本。 y:形状数组[n_samples] 每个样本的类成员的整数标签。 ............
cv2.xfeatures2d_SIFT.compute 2019-06-11 14:34 方法 评论 0 更多详情 compute(self, image, keypoints, descriptors=None) 计算特征描述符 args: image:输入图像 keypoints:图像的关键点集合 return: 特征点,特征描述符元组 ............
cv2.xfeatures2d_SIFT.detect 2019-06-11 14:01 方法 评论 0 更多详情 detect(self, image, mask=None) 检查图片中的关键点 ............
cv2.drawKeypoints 2019-06-11 13:39 方法 评论 0 更多详情 drawKeypoints(image, keypoints, outImage, color=None, flags=None) image:也就是原始图片 keypoints:从原图中获得的关键点,这也是画图时所用到的数据 outputimage:输出 color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。 flags:绘图功能的标识设置flags的四个参数: cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间点 cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对 cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形 cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制 ............
cv2.cornerHarris 2019-06-11 13:33 方法 评论 0 更多详情 cv2.cornerHarris(src, blockSize, ksize, k, dst=None, borderType=None) src:数据类型为 float32 的输入图像 blockSize:角点检测中考虑的区域大小 ksize:Sobel求导中使用的窗口大小 k:Harris 角点检测方程中的自由参数,取值参数为 [0.04 0.06] dst:输出图像 borderType:边界的类型 ............
cv2.BOWKMeansTrainer 2019-06-10 21:03 方法 评论 0 更多详情 # 创建BOW训练器,指定k-means参数k 把处理好的特征数据全部合并,利用聚类把特征词分为若干类,此若干类的数目由自己设定,每一类相当于一个视觉词汇 ............
cv2.FlannBasedMatcher 2019-06-07 22:03 方法 评论 0 更多详情 FLANN英文全称Fast Libary for Approximate Nearest Neighbors,FLANN是一个执行最近邻搜索的库,官方网站http://www.cs.ubc.ca/research/flann。 它包含一组算法,这些算法针对大型数据集中的快速最近邻搜索和高维特征进行了优化,对于大型数据集,它比BFMatcher工作得更快。经验证、FLANN比其他的最近邻搜索软件快10倍。 flann = cv2.FlannBasedMatcher(indexParams,searchParams) 其中FLANN匹配对象接收两个参数:indexParams和searchParams。这两个参数在python中以字典形式进行参数传递(在C++中以结构体形式进行参数传递),为了计算匹配,FALNN内部会决定如何处理索引和搜索对象。 1、indexParams 对于像SIFT,SURF等算法,您可以传递以下内容: indexParams = dict(algorithm = FLANN_INDEX_KDTREE,trees = 5) 参数algorithm用来指定匹配所使用的算法,可以选择的有LinearIndex、KTreeIndex、KMeansIndex、CompositeIndex和AutotuneIndex,这里选择的是KTreeIndex(使用kd树实现最近邻搜索)。KTreeIndex配置索引很简单(只需要指定待处理核密度树的数量,最理想的数量在1~16之间),并且KTreeIndex非常灵活(kd-trees可被并行处理)。 2、searchParams SearchParams它指定索引数倍遍历的次数。 值越高,精度越高,但也需要更多时间。 如果要更改该值,请传递:searchParams = dict(checks = 50) 实际上、匹配效果很大程度上取决于输入。5 kd-trees和50 checks总能取得具有合理精度的结果,而且能够在很短的时间内完成匹配。 ............
cv2.imread 2019-05-03 19:01 方法 评论 0 更多详情 使用函数cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。 ............