python中cv2函数 python中的cv2模块

python用cv2怎么输出图像的基本信息源码python中cv2函数:
#!/usr/bin/env python
#coding=utf-8
__author__ = 'zhangdebin'
import cv2
【python中cv2函数 python中的cv2模块】if __name__ == '__main__':
#image read
image = cv2.imread("/Users/zhangdebin/Documents/checkFace2.jpg")
image0 = cv2.imread("/Users/zhangdebin/Documents/checkFace2.jpg",0)
image1 = cv2.imread("/Users/zhangdebin/Documents/checkFace2.jpg",1)
print image
cv2.namedWindow("the window")
cv2.imshow("the window", image)
cv2.namedWindow("the window0")
cv2.imshow("the window0", image0)
cv2.namedWindow("the window1")
cv2.imshow("the window1", image1)
cv2.waitKey(0)
其中python中cv2函数,cv2是python中cv2函数我在mac系统中安装python中cv2函数的python-opencv包python中cv2函数 , 具体安装方法在另一篇博文有介绍 ,
cv2.imread和matlab中的imread函数很像,其中源码有一个参数imread(…)
imread(filename[, flags]) - retval , falgs经测试,当缺省时为原图像,当falgs=0时 , 因为只读取第一个字节,彩色图像读取为灰度图像 , 当falgs逐渐增加,向7(0~7,8位)靠拢时,字节数增加 , 图像色彩越来越靠近原图像 , 当超过8位,比如8,变为(8-8=0),又是只取一个字节,视觉效果为灰度图,同理,15位为原图,有兴趣的朋友可以自己测试下,具体效果见下图:
同时,cv2中自带了falgs =cv2.CV_LOAD_IMAGE_GRAYSCALE或
cv2.CV_LOAD_IMAGE_COLOR,其实这两个参数和上面是一样的,0为grayimage,但是color=1,而且显示时候也不是彩色的,这和matlab的imread有很大区别
grayimage = cv2.imread('/Users/zhangdebin/Documents/checkoutFace2.jpeg',cv2.CV_LOAD_IMAGE_GRAYSCALE);
colorimage = cv2.imread('/Users/zhangdebin/Documents/checkoutFace2.jpeg', cv2.CV_LOAD_IMAGE_COLOR)
print 'cv2.grayscale:'
print cv2.CV_LOAD_IMAGE_GRAYSCALE
print 'colr:'
print cv2.CV_LOAD_IMAGE_COLOR
cv2.grayscale:
colr:
1
opencv-python中的cv2.namedWindow()有什么用?opencv-python中的cv2.namedWindow(),其作用如下:
使用cv2.imshow()的时候,如果图片太大 , 会显示不全并且无法调整 。
因此在cv2.imshow()的前面加上这样的一个语句:cv2.namedWindow('image', 0) , 得到的图像框就可以自行调整大小 , 可以拉伸进行自由调整 。
扩展资料:
用法:cv2.namedWindow('窗口标题',默认参数)
默认参数:
cv2.WINDOW_AUTOSIZE cv2.WINDOW_KEEPRATIO cv2.WINDOW_GUI_EXPANDED)
参数:
(1)cv2.WINDOW_NORMAL:窗口大小可改变 。
(2)cv2.WINDOW_AUTOSIZE:窗口大小不可改变 。
(3)cv2.WINDOW_FREERATIO:自适应比例 。
(4)cv2.WINDOW_KEEPRATIO:保持比例 。
OpenCV-Python教程:19.轮廓属性1图像矩
帮你计算一些属性,比如重心 , 面积等 。
函数cv2.moments()会给你一个字典,包含所有矩值
你可以从这个里面得到有用的数据比如面积,重心等 。重心可以用下面的式子得到:
2.轮廓面积
轮廓面积由函数cv2.contourArea()得到或者从矩里得到M['m00']
3.轮廓周长
可以用cv2.arcLength()函数得到 。第二个参数指定形状是否是闭合的轮廓(如果传True) 。或者只是一个曲线 。
4.轮廓近似
这会把轮廓形状近似成别的边数少的形状 , 边数由我们指定的精确度决定 。这是Douglas-Peucker算法的实现 。
要理解这个,假设你试图找一个图像里的方块 , 但是由于图像里的一些问题,你得不到一个完美的方块,只能得到一个“坏方块” 。现在你可以使用这个函数来近似 , 第二个参数叫epsilon,是从轮廓到近似轮廓的最大距离 。是一个准确率参数,好的epsilon的选择可以得到正确的输出 。
在下面第二个图像里,绿线显示了epsilon = 10% of arc length 的近似曲线 。第三个图像显示了epsilon = 1% of the arc length 。第三个参数指定曲线是否闭合 。
5.凸形外壳
凸形外壳和轮廓近似类似,但是还不一样(某些情况下两个甚至提供了同样的结果) 。这儿,cv2.convexHull()函数检查凸面曲线缺陷并修复它 。一般来说,凸面曲线总是外凸的,至少是平的,如果它内凹了 , 这就叫凸面缺陷 。比如下面这张图 , 红线显示了手的凸形外壳 。双向箭头显示了凸面缺陷 , 是轮廓外壳的最大偏差 。
参数详情:
·points 是我们传入的轮廓
·hull 是输出,一般我们不用传
·clockwise: 方向标示,如果是True,输出凸形外壳是顺时针方向的 。否则,是逆时针的 。
·returnPoints:默认是True 。然后会返回外壳的点的坐标 。如果为False,它会返回轮廓对应外壳点的索引 。
所以要获得凸形外壳,下面
但是如果你想找到凸面缺陷,你需要传入returnPoints = False 。我们拿上面的矩形图形来说,首先我找到他的轮廓cnt,现在用returnPoints = True来找他的凸形外壳,我得到下面的值:[[[234 202]], [[51 202]], [51 79]], [[234 79]]]是四个角的点 。如果你用returnPoints = False,我会得到下面的结果:[[129], [67], [0], [142]].这是轮廓里对应点的索引,比如cnt[129] = [234, 202]],这和前面结果一样 。
6.检查凸面
有一个函数用来检查是否曲线是凸面, cv2.isContourConvex().它返回True或False 。
7.边界矩形
有两种边界矩形
7.a.正边界矩形
这个矩形不考虑对象的旋转,所以边界矩形的面积不是最小的,函数是cv2.boundingRect() 。
假设矩形左上角的坐标是(x,y),(w, h)是它的宽和高
7.b.渲染矩形
这个边界矩形是用最小面积画出来的,所以要考虑旋转 。函数是cv2.minAreaRect() 。它返回一个Box2D结构,包含了(左上角(x,y),(width, height),旋转角度) 。但是要画这个矩形我们需要4个角 。这四个角用函数cv2.boxPoints()得到
8.最小闭包圆
我们找一个目标的外接圆可以用函数cv2.minEnclosingCircle().这个圆用最小面积完全包围目标 。
9.椭圆
用一个椭圆来匹配目标 。它返回一个旋转了的矩形的内接椭圆
10. 直线
类似的我们可以匹配一根直线,下面的图像包含一系列的白色点 , 我们可以给它一条近似的直线 。
END
python前视图转换为俯视图想要把前视图转化为鸟瞰图,有两种做法
1.在没有标定的情况下,只能选取四个点对了
在有标定的情况下 , 可以直接使用标定的参数
这里主要介绍1
1.没有标定的情况下,主要用到了两个函数
M = cv2.getPerspectiveTransform(src, dst)
warped = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]1080))
cv2.getPerspectiveTransform 从四个点对中计算透视变换,返回值为3*3的透视变换矩阵
cv2.warpPerspective 计算透视变换后的图像
这里自己遇到的坑是,在计算透视变换矩阵的时候,怎么获取那四个点对,翻了很多blog,都没搞清 , 最后认认真真的找了一个认认真真的阅读之后,总算摸到门道了,有了一种融会贯通的感觉 。
现在的目标是将图像由前视图转化为鸟瞰图,根据先验知识,在鸟瞰图下,长方形物体显示出来肯定是长方形,因此,我们只要在前视图中找到一个正方形的物体,并指定他在俯视图中的坐标就可以了 , 这里有个但是,由于先验信息里面只有矩形这个信息,具体的长宽比什么的,以及实际的大小未知,所以转化到鸟瞰图下并不能反应物体的真实长度 。
这里怎么定义转化后的坐标要自己把握
790ec7dc8aa1
原图
比如说转化到黄色的坐标(内接矩形),这时候就会内缩,图像出现黑边
790ec7dc8aa1
转化到黄色坐标
如果转化到蓝色的 , 那么能看到的方位就很小了,只有当前车道了(外接矩形)
790ec7dc8aa1
转化到蓝色坐标
dst的坐标也可以自己写,想要转成多大的图像也可以自己填
比如说根据车道的宽度和虚线的长度,可以大概估算出实际长宽比 , 一个车道宽度为3.75米 这种城市道路一般虚线是两米,间隔4米(高速一般是69,也就是15米)大概估计一下,高度是12米,也就是说长宽比为12:7,想要显示出4个车道,图像的宽度为1920,折算了一下,目标图像的坐标大概是(这里要注意,图像的坐标是从左上角开始算的)
790ec7dc8aa1
自定义
坐标定义代码:
src = https://www.04ip.com/post/np.float32([(1242,1949),(1961,1949), (2695, 2542), (133, 2542)])
#内接矩形
dst = np.float32([(1242, 1949), (1961, 1949), (1961, 2542), (1242, 2542)])
#外接矩形
dst = np.float32([(132, 1949), (2695, 1949), (2695, 2542), (133, 2542)])
#自定义
dst = np.float32([(480,1560-1080), (1440,1560-1080), (1440,3096-1080), (480,3096-1080)])
2.使用标定参数来转化
这个转化就是真实的了,因为知道相机的内参 , 还有相机的pitch角以及相机距离地面的高度
matlab里面转的,要标定的参数
可以参考的透视变换
怎么在python中使用cv2.cvtcolor注意,现在OpenCV for Python就是通过NumPy进行绑定的 。所以在使用时必须掌握一些NumPy的相关知识!
图像就是一个矩阵 , 在OpenCV for Python中,图像就是NumPy中的数组!
如果读取图像首先要导入OpenCV包,方法为:
import cv2
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#emptyImage3[...]=0
【python】opencv库中cv2.findContours()和cv2.drawContours()函数一.查找轮廓
cv2.findContours()
[image,] contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
轮廓检索方式python中cv2函数:
轮廓近似方法python中cv2函数:
二.绘制轮廓
cv2.drawContours()
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
关于python中cv2函数和python中的cv2模块的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读