opencv 学习笔记 (图像基础)

来源:互联网 发布:python opencv3.0 svm 编辑:程序博客网 时间:2024/05/16 18:18

1. 读图像,显示图像,保存图像

读图像,显示的格式有:彩色(1) cv2.IMREAD_COLOR,灰度(0) cv2.IMREAD_GRAYSCALE

import cv2img = 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>>> [611736]      

显示图像等待时长,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 plimg=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,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
0 0
原创粉丝点击