python opencv 摄像头怎么构建二维三维图像

本文转载自&& & &作者&
本文是OpenCV& 2 Computer Vision Application Programming Cookbook读书笔记的第一篇。在笔记中将以Python语言改写每章的代码。
PythonOpenCV的配置这里就不介绍了。
注意,现在OpenCV for Python就是通过NumPy进行绑定的。所以在使用时必须掌握一些NumPy的相关知识!
图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!
如果读取图像首先要导入OpenCV包,方法为:
import cv2
读取并显示图像
在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。只需这样:
img = cv2.imread("D:\cat.jpg")
OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。
接着创建一个窗口
cv2.namedWindow("Image")
然后在窗口中显示图像
cv2.imshow("Image", img)
最后还要添上一句:
cv2.waitKey (0)
如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。
完整的程序为:
import cv2
img = cv2.imread("D:\\cat.jpg")
cv2.namedWindow("Image")
cv2.imshow("Image", img)
cv2.waitKey (0)
cv2.destroyAllWindows()
最后释放窗口是个好习惯!
创建/复制图像
新的OpenCV的接口中没有CreateImage接口。即没有cv2.CreateImage这样的函数。如果要创建图像,需要使用numpy的函数(现在使用OpenCV-Python绑定,numpy是必装的)。如下:
emptyImage = np.zeros(img.shape, np.uint8)
在新的OpenCV-Python绑定中,图像使用NumPy数组的属性来表示图像的尺寸和通道信息。如果输出img.shape,将得到(500, 375, 3),这里是以OpenCV自带的cat.jpg为示例。最后的3表示这是一个RGB图像。
也可以复制原有的图像来获得一副新图像。
emptyImage2 = img.copy();
如果不怕麻烦,还可以用cvtColor获得原图像的副本。
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#emptyImage3[...]=0
后面的emptyImage3[...]=0是将其转成空白的黑色图像。
保存图像很简单,直接用cv2.imwrite即可。
cv2.imwrite("D:\\cat2.jpg", img)
第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,如下:
cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])
第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存储的两幅图:
对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
保存的图像尺寸如下:
还有一种支持的图像,一般不常用。
完整的代码为:
import cv2
import numpy as np
img = cv2.imread("./cat.jpg")
emptyImage = np.zeros(img.shape, np.uint8)
emptyImage2 = img.copy()
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#emptyImage3[...]=0
cv2.imshow("EmptyImage", emptyImage)
cv2.imshow("Image", img)
cv2.imshow("EmptyImage2", emptyImage2)
cv2.imshow("EmptyImage3", emptyImage3)
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
cv2.waitKey (0)
cv2.destroyAllWindows()
参考资料:《OpenCV References Manuel》《OpenCV& 2 Computer Vision Application Programming Cookbook》《OpenCV Computer Vision with Python》
本文转自& 作者
阅读(...) 评论()4044人阅读
openCV(11)
#create a image and test draw it
创建一张图片,需要定义图片各个属性,包括大小,图片像素类型(每个像素点用多少bits表示),通道数3(rgb)
import cv2.cv as cv
width = 200
height = 200
no_of_bits = 8
channels = 3
image = cv.CreateImage((width,height), no_of_bits, channels)
创建显示窗口
win_name = &test&
cv.NamedWindow(&test&,cv.CV_WINDOW_AUTOSIZE)
cv.ShowImage(win_name, image)
画一条直线,只需定义两个顶点坐标和线的宽度以及颜色
线的属性有颜色 ,&宽度, 线类型(当线的宽度为-1时,矩形与圆形将是实心,及颜色填充)
#draw a line
start_point = (x,y)
end_point = (x1,y1)
#line attribute
color = (0,255,0)
line_width = 4
line_type = 8
cv.Line(image, start_point, end_point, color, line_width, line_type)
画一个矩形,只需定义矩形的左上顶点和右下顶点位置,以及线的颜色和宽度
rect_start = (x,y)
rect_end = (x1,y1)
cv.Rectangle(image, rect_start, rect_end, color, 1, 0)
画一个圆,只需定义圆的中心点坐标和圆的半径,以及线的颜色和宽度
radius = 60
circle_center = (x,y)
cv.Circle(image, circle_center, radius, color)
cv.ShowImage(win_name, image)
cv.WaitKey()
示例运行结果
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:120623次
积分:1749
积分:1749
排名:千里之外
原创:49篇
转载:34篇
评论:16条
(3)(10)(5)(1)(11)(3)(9)(1)(6)(2)(3)(2)(5)(1)(8)(2)(5)(8)(飞翔的言)
第三方登录:在python中使用OpenCV
网上对于Python调用OpenCV库的例程和资料都比较少。Python中调用OpenCV可以使用CV2,也可以使用CV。两者的不同在于,CV2的数据结构全部为numpy结构。所以一般如下:
import cv2
import numpy as np
使用CV2的好处在于,numpy的数据结构容易处理,编程风格与matlab非常相近。
&&与CV2相比,CV库就大相径庭了,其数据结构、函数组织形式基本与C++版的OpenCV相差无几:
import cv2.cv as cv
import numpy as np
在使用CV库时最好也导入numpy库,因为有的地方还是可以用到的。
& &&由于个人觉得CV与商业应用的调用格式比较相近,学好CV库对将来从事OpenCV的正规工作会有一定帮助,所以我选择了CV库的学习。可能是因为一时兴起的原因,我并没有系统地学习OpenCV的基础知识,其实,如果要学好OpenCV最好是借一本专业的书籍,从基本的数据结构、命名规则学起。当然,如果能弄懂里面那些函数的算法原理就更好了。这方面一般OpenCV的学习书籍是不会讲的。不过网上可以找到一些chm格式的帮助文档(有中文的),我发现里面有很多函数的原理会做简短的说明,这部分对于想完全弄懂图像处理原理的人很有用。需要这方面资料的可以百度“opencv参考手册.chm”。
图像读入:img =
cv.LoadImage('ImageName')
变换彩色空间:cv.CvtColor(src, dst,
cv.CV_BGR2YCrCb) #这里也可以把图像转换为灰度图。
变换图像时,要注意dst要事先分配内存:
cv.CreateImage(cv.GetSize(img), cv.IPL_DEPTH_8U, 3)
将彩色图像的各个通道分开:
cv.Split(img,
&ch1, ch2, ch3, None)
有时我们会用到矩阵:
matrix = cv.CreateMat(rows,
cols, cv.CV_32FC1)
上面语句中,CV_32FC1代表32位浮点型单通道。‘C'代表通道,’F'代表浮点型。通过这个语句就创建了一个rows行,cols列的矩阵,并且分配了空间。
如果要对矩阵进行赋值可以用如下 :
=[[1,1,1],[1,2,1],[1,-10,1],[1,2,1]]#data 为一个3x3的二维列表
for i in range(3):
& &&for j in
&&matrix[i,j] = data[i][j]
对于矩阵里的数据,普通方法是没法查看的,可以利用np库:
print np.asarray(matrix)
#这里就是我为什么在CV库中也导入numpy库的原因了。如果有时对数据不明白,想打印出来时,利用np这个函数就比较方便了。
(待续……)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 python 画三维图像 的文章

 

随机推荐