Jerry's Blog

Recording what I learned everyday

View on GitHub


6 February 2020

OpenCV(1) -- Basics

by Jerry Zhang

Github

https://github.com/opencv

图片的位置在samples-> data

图片的基本操作

读取图片

用cv2.imread(param1, param2)。第一个参数是图片的路径或文件名,第二个参数是读取文件的类型,1表示读取彩色图片,0参数表示读取黑白图片,-1表示默认原图类型。

img = cv2.imread('lena.jpg', 0)

显示图片

用cv2.imshow()。第一个参数是给窗口起个名字,第二个参数是要显示的图片变量。这个函数之后,必须用另一个函数cv2.waitKey()设置这个窗口的存活时间,0表示无限期,直到用户关掉为止。最后还要用cv2.destroyAllWindows()把所有窗口都关掉。

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

waitKey()这个函数还可以响应用户的按键。把它的返回值赋给一个变量,然后检查这个变量的值,就可以知道用户做了什么操作,(比如按了Esc键),从而做出对应的反应。

img = cv2.imread('lena.jpg', 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)

if k == 27:
  cv2.destroyAllWindows()
elif k == ord('s'):
  cv2.imwrite('lena_copy.png', img)
  cv2.destroyAllWindows()

视频

VideoCapture的参数是指哪一台摄像机或者视频文件,0代表默认的摄像头。也可以用cvtColor转换成黑白的。

import cv2 as cv

cap = cv.VideoCapture(0)

while(True):
    ret, frame = cap.read()
    # gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('frame', frame)

    if cv.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv.destroyAllWindows()

或者

cap = cv.VideoCapture('name.avi')

还可以读取视频文件的属性。比如在while循环的条件里检查一下while(cap.isOpened()),或者用get()函数获取某个属性值。

import cv2 as cv

cap = cv.VideoCapture(0)

while(True):
    ret, frame = cap.read()

    cap.get(cv.)

    # gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('frame', frame)

    if cv.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv.destroyAllWindows()

通过VideoWriter()函数可以录制视频


import cv2 as cv

cap = cv.VideoCapture(0)
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while(True):
    ret, frame = cap.read()
    if ret:
        cap.get(cv.CAP_PROP_FRAME_WIDTH)
        cap.get(cv.CAP_PROP_FRAME_HEIGHT)
        out.write(frame)
        # gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
        cv.imshow('frame', frame)

        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
out.release()
cv.destroyAllWindows()
tags: OpenCV