opencv 学习笔记 (图像基础)
2016-06-08 15:59
429 查看
1. 读图像,显示图像,保存图像
读图像,显示的格式有:彩色(1) cv2.IMREAD_COLOR,灰度(0) cv2.IMREAD_GRAYSCALEimport cv2 img = cv2.imread('01.png', cv2.IMREAD_COLOR) cv2.imshow('image', img) k = cv2.waitKey(0) cv2.imwrite('02.png', img) cv2.destroyAllWindows()
彩色的img的shape对应 hight, width, channel,通道对应[blue, green, red],每个点位三个颜色通道的值,当分量为0,表示没有该颜色分量,最大值为255,处理后的 img2 没有红色分量
>>> img.shape >>> [611,736,3] >>> cc = [1, .5, 0] # blue, green, red BGR >>> img2 = img * cc
灰色图像对应的shape为 ,每个点位一个灰度值
>>> img.shape >>> [611,736]
显示图像等待时长,0为无限时长等待,k = cv2.waitKey(0),可以选择其他方式退出,按esc为’27’,或者按’S’键保存图像
k = cv2.waitKey(0) if k == 27: cv2.destroyAllWindows() if k == ord('s'): cv2.imwrite('neo_great.png', img) cv2.destroyAllWindows()
显示图像可以用pylab,但是注意用pylab的显示颜色为RGB,要保证和原图像一致,需颠倒颜色通道顺序
import pylab as pl img=cv2.imread('01.png') img=img[:,:,::-1] # b,g,r=cv2.split(img) 或者 b,g,r=(img[:,:,0],img[:,:,1],img[:,:,2]) # img=cv2.merge([r,g,b]) pl.imshow(img) pl.show()
提取某一象素点的颜色,或者直接修改
px = img[100,100] >>> print px >>> [157 166 200] img[10,10]=[0,0 4000 ,255]
照10张棋盘图片,用于标定相机
def take_photo(): cap=cv2.VideoCapture(0) i=0 while True: ret,frame=cap.read() cv2.imshow('img', frame) k=cv2.waitKey(1) if k==ord('s'): cv2.imwrite('front_%d.png'%i,frame) i+=1 if i==10: break cap.release() cv2.destroyAllWindows()
2. 相机标定
对象点,是3D空间的点,用numpy创建这些点,去Z=0平面上的点,角点个数为x*y图像点,是2D平面的点,就是用 cv2.findChessboardCorners 这个函数找出图像上的(x,y)个角点,corner就是角点在图像上的坐标,就是图像点
def calibrate(x,y,n=10): objpoints=[] imgpoints=[] for i in range(n): # object points objp=np.zeros((x*y,3),np.float32) objp[:,:2]=np.mgrid[0:x,0:y].T.reshape(-1,2) # image points img=cv2.imread('front_%d.png'%i,cv2.IMREAD_GRAYSCALE) ret,corner=cv2.findChessboardCorners(img,(x,y),None) if ret==True: objpoints.append(objp) imgpoints.append(corner) ret,mtx,dist,rvec,tvec=cv2.calibrateCamera(objpoints,imgpoints,img.shape[::-1],None,None) return corner,mtx,dist,rvec,tvec
相关文章推荐
- centos7安装mysql5.6(rpm方式)
- Centos7下RPM方式安装mysql-5.6.24
- linux 语法结构
- linux配置nfs
- TopK算法
- Linux对内存管理的两篇好文章
- shell编程基础(一)
- atan和tan什么的差别,数学不好的人要去死啊
- ecshop装完后 报错警告问题更改总结
- 一个简单的Linux驱动程序和Makefile
- 端午就读这本书了——《Docker生产环境实践指南》附带书评
- Linux --- 计算程序执行时间
- 今天写了一个批量检查ip是否ping得通的脚本,备忘
- mysql高可用集群之MHA和Galera Cluster
- Centos下内网NDS主从环境部署记录
- Linux --- 原子操作
- push or get File or Folder using scp wrapped with expect and bash
- CentOS关闭休眠和屏保模式
- 32位机器上面交叉编译器aarch64-linux-gcc的制作过程
- Apache的mpm工作模式