opencv指令(持续更新中)

来源:互联网 发布:魔方小站淘宝店 编辑:程序博客网 时间:2024/05/16 15:00

如果我们要创建一个宽为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'):    breakelif k==ord('s'):    cv2.imwrite('img.jpg',img)    break#cv2.destroyWindows()

读取图像尺寸

sp = img.shape