opencv 学习笔记 (图像基础)

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

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

import 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
>>> [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 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,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值