用视觉识别可以做很多好玩的东西,比如有趣的互动艺术。不仅如此视觉识别的应用非常广泛,很感兴趣。OpenCV是个免费开源的视觉库,感谢OpenCV降低了门槛,让我这个外行菜鸟也可以学着玩玩视觉识别。
OpenCV2.3.2文档(部分有中文翻译)http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html官方OpenCV2.4.5文档 http://docs.opencv.org/ (OpenCV 2.4.5.0 documentation)
一副数字图像是由若干像素组成,若干像素的颜色值就形成了一个数值矩阵
OpenCV 其主要目的就是通过处理和操作这些数值矩阵,来获取更高级的信息。因此,OpenCV如何存储并操作图像是首先要学习的。
基本上讲 Mat 是一个类,由两个数据部分组成:
一个矩阵信息头(包含矩阵尺寸,存储方法,存储地址等信息)一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。
OpenCV函数中输出矩阵的内存分配是自动完成的(如果不特别指定的话)。使用OpenCV的C++接口时不需要考虑内存释放问题。赋值运算符和拷贝构造函数( ctor )只拷贝信息头和矩阵指针 ,而不拷贝矩阵。使用函数 clone() 或者 copyTo() 来拷贝矩阵本身(而不只是信息头和矩阵指针)。
存储图像方法
存储像素值,需要指定颜色空间和数据类型颜色空间:灰度级(黑白),彩色(RGB,HSV,HLS,YCrCb,CIE L*a*b)数据类型:char(单字节)、float(4字节,32位)、double(8字节,64位)
创建一个 Mat 对象
Mat() 构造函数Create() function: 函数MATLAB形式的初始化方式: zeros(), ones(), :eyes()randu() 来对一个矩阵使用随机数填充,需要指定随机数的上界和下界:
显示 Mat 对象
为了debug,我们会希望看到矩阵的实际值。为此,可以通过 Mat 的运算符 << 来实现,但这只对二维矩阵有效。
基本看懂了,准备在Python里试试创建一个矩阵(Mat)对象。呃..,cv2.?没有 Mat 方法啊
一般的,argv 是命令行传入的参数。在这里是?
cv2.nameWindow
import video
ImportError: No module named video
flip()的说明是,在水平方向或垂直方向或者两个轴向翻转一个二维数组。
flipcode:0 x轴镜像,即图像上下翻转。 1 y轴镜像,即图像左右翻转。-1 x轴+y轴镜像,即垂直翻转且水平翻转。
img=cv2.flip(img,1) #flip image around horizontal