如果我们要创建一个宽为360,高为640的3通道图像(RGB图像),可以采用如下语句:
img=cvCreateImage( cvSize(360,640), IPL_DEPTH_8U,3 );
要初始化一张相同大小的灰度图像,可以采用如下语句:
img=cvCreateImage( cvSize(360,640), IPL_DEPTH_8U,1 );
更改图像的尺寸为原来尺寸的一半
img = cv2.resize(img, (img.shape[1]/2, img.shape[0]/2), interpolation=cv2.INTER_CUBIC)
将两个图像img1和img2混合成一个图像dst,其中的0.8和0.2分别代表各自的透明度
dst=cv2.addWeighted(img1, 0.8, img2, 0.2, 0)
将RGB图像转化成灰度图(我记得有一个GRAY2BGR但是没用过)
imgray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
获取画出轮廓的数量
num_contousr = len(contours)
将RGB图像分成三个通道
(B,G,R) =cv2.split(img)
//以后的R图像可以直接使用下面将R通道的图像进行二值化
ret,binary = cv2.threshold(R,220,255,cv2.THRESH_BINARY)
寻找图像中的轮廓线
contours,hierarchy =cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
在图像img中画出找到的轮廓线,-1表示都画出,后面的是红色,线粗为3
cv2.drawContours(img,contours,-1,(0,0,255),3)
下面的cx和cy即是轮廓的质心位置
也可以参考这个链接,有源码
for i in range(1,num_contours,1):
cnt = contours[i]
M =cv2.moments(cnt)
if M['m00'] !=0:
cx =int(M['m10']/M['m00'])
cy =int(M['m01']/M['m00'])
获取轮廓的面积
area =cv2.contourArea(cnt)
在图像中添加文字,图像名称,添加的文字,坐标,字体,大小可以为小数,颜色,字体粗度
cv2.putText(img,'x',(cx,cy),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),4)
将int类型数字转换成字符串,示例如下
x=int(898989.1464)
t=repr(x)
输出的就是898989这个字符串
设置如何跳出以及保存图像
k=cv2.waitKey(0)#一直等待命令的输入
if k==ord('q'):
break
elif k==ord('s'):
cv2.imwrite('img.jpg',img)
break#cv2.destroyWindows()
读取图像尺寸
sp = img.shape