学习python 版本opencv必备的基础代码

  • 基础读图灰度化二值化
  • python opencv获取图片长宽
  • 保存图片
    • python批量保存图片
    • python从视频中生成图片
  • python opencv灰度化、二值化
  • python opencv膨胀腐蚀
  • 通过打开摄像头捕捉视频 :
  • python opencv画矩形
  • python opencv裁剪矩形
  • opencv_python实现二值图像的孔洞填充
  • 通过打开视频文件读取视频:
  • python opencv 使用图片生成视频
  • Python 用 OpenCV 画点和圆
  • Python 用 OpenCV 画矩形框
  • 视频的分解:
  • opencv python 版本resize函数用法
  • 轮廓相关操作,查找,绘制,过滤等
  • 轮廓相关面积,周长,重心等
  • Python 下opencv 应用: 摄像头参数设置
  • python opencv设置摄像头分辨率
  • python opencv保存视频为mp4格式

基础读图灰度化二值化

import cv2
import os

# 确认上述地址是否存在
src = cv2.imread('cheese_1.jpg')
cv2.namedWindow("3",0)
cv2.imshow("3", src)
cv2.waitKey(20)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
cv2.namedWindow("binary",0)
cv2.imshow("binary", gray)
cv2.waitKey(100)

etVal, threshold = cv2.threshold(gray, 125, 255, cv2.THRESH_BINARY)
cv2.namedWindow("threshold",0)
cv2.imshow("threshold", threshold)
cv2.waitKey(0)

python opencv获取图片长宽

[height,width,tongdao]=frame.shape
print(width,height,tongdao)

OpenCV中提供了一个基本的视频操作类VideoCaputre,它是OpenCV用来通过摄像头、视频文件或图像序列来获取及操作视频的类。VideoCaputre有两种读取视频的方法,分别是通过摄像头读取与通过视频文件读取。

保存图片

 cv2.imwrite('messigray.png',img)

python批量保存图片

python从视频中生成图片

import cv2
#获取一个视频并打开
cap=cv2.VideoCapture("1.mp4")  #打开摄像头并创建摄像头对象
#其中0表示打开内置摄像头,1表示打开外接摄像头
if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了摄像头捕捉视频')
else:
    print('打开摄像头失败')
if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了视频文件')
    fps = cap.get(cv2.CAP_PROP_FPS)  # 返回视频的fps--帧率
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)  # 返回视频的宽
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 返回视频的高
    print('fps:', fps,'width:',width,'height:',height)
    i=0
    while 1:
            i = i + 1
            ret, frame = cap.read()  # 读取一帧视频
            frame = cv2.resize(frame, (1920, 1080), interpolation=cv2.INTER_AREA)
            cv2.namedWindow("frame",0)
            cv2.imshow("frame", frame)
            cv2.waitKey(20)
            if i%10==0:
                file_name = './output/' + "shoushi_"+str(i) + '.jpg'
                cv2.imwrite(file_name, frame)
else:
    print('视频文件打开失败')


python opencv灰度化、二值化

cv2.imshow("3", img_temp)
cv2.waitKey(20)
gray = cv2.cvtColor(img_temp, cv2.COLOR_BGR2GRAY)
cv2.imshow("binary", gray)
cv2.waitKey(100)

etVal, threshold = cv2.threshold(gray, 125, 255, cv2.THRESH_BINARY)
cv2.imshow("threshold", threshold)
cv2.waitKey(200)

python opencv膨胀腐蚀

#coding=utf-8
import cv2
import numpy as np

img = cv2.imread('D:/binary.bmp',0)
#OpenCV定义的结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))

#腐蚀图像
eroded = cv2.erode(img,kernel)
#显示腐蚀后的图像
cv2.imshow("Eroded Image",eroded)

#膨胀图像
dilated = cv2.dilate(img,kernel)
#显示膨胀后的图像
cv2.imshow("Dilated Image",dilated)
#原图像
cv2.imshow("Origin", img)

#NumPy定义的结构元素
NpKernel = np.uint8(np.ones((3,3)))
Nperoded = cv2.erode(img,NpKernel)
#显示腐蚀后的图像
cv2.imshow("Eroded by NumPy kernel",Nperoded)

cv2.waitKey(0)
cv2.destroyAllWindows()

通过打开摄像头捕捉视频 :

import cv2
#获取一个视频并打开
cap=cv2.VideoCapture(0)  #打开摄像头并创建摄像头对象
#其中0表示打开内置摄像头,1表示打开外接摄像头
if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了摄像头捕捉视频')
else:
    print('打开摄像头失败')
if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了视频文件')
    fps = cap.get(cv2.CAP_PROP_FPS)  # 返回视频的fps--帧率
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)  # 返回视频的宽
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 返回视频的高
    print('fps:', fps,'width:',width,'height:',height)

    while 1:
            ret, frame = cap.read()  # 读取一帧视频
            cv2.namedWindow("frame",0)
            cv2.imshow("frame", frame)
            cv2.waitKey(20)
else:
    print('视频文件打开失败')

python opencv画矩形

Tp_x = 0
Tp_y =0
Tp_width = 10
Tp_height = 10
cv2.rectangle(img, (Tp_x, Tp_y), (Tp_x + Tp_width, Tp_y + Tp_height), (0, 0, 255), 1)

python opencv裁剪矩形

Tp_x = 0
Tp_y =0
Tp_width = 10
Tp_height = 10
img_temp=img[Tp_y:Tp_y+Tp_height, Tp_x:Tp_x+Tp_width]#参数含义分别是:y、y+h、x、x+w

opencv_python实现二值图像的孔洞填充

https://blog.csdn/Leon_yy/article/details/81189202

通过打开视频文件读取视频:

import cv2
#获取一个视频并打开
cap=cv2.VideoCapture('1.mp4')

if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了视频文件')
else:
    print('视频文件打开失败')

python opencv 使用图片生成视频

import cv2
import time

videoWriter = cv2.VideoWriter('test_1.avi', cv2.VideoWriter_fourcc(*'MJPG'), 3, (1920, 1080))
# retval = cv.VideoWriter.open(filename, fourcc, fps, frameSize[, isColor])
# - 保存视频为test.avi,可以选择mp4等
# - fps为25,即每秒25张图片
# - 视频尺寸大小为1920,1080
# - isColor可以为true,flase选择是否有颜色

for i in range(0, 5):
    # 加载图片,图片更多可以改变上面的10
    img = cv2.imread('./image/000' + str(i) + '.png')
    img = cv2.resize(img, (1920, 1080))
    # 如果每张图片为只显示一下,就用如下代码
    # videoWriter.write(img)

    # 如下让每张图显示1秒,具体与fps相等
    a = 0
    while a < 30:
        videoWriter.write(img)
        a += 1

videoWriter.release()

Python 用 OpenCV 画点和圆

https://blog.csdn/u011520181/article/details/83933325

Python 用 OpenCV 画矩形框

https://blog.csdn/u011520181/article/details/84036425

视频的分解:

视频其实就是由连续的图像画面组成的。当连续的图像变化每秒超过24帧画面以上时,根据视觉暂留原理,人眼就无法识别是否是静态画面了,这样平滑连续的视觉效果看起来就像是视频了。

帧率是以帧称为单位的位图图像连续出现在显示器上的频率,通俗来讲,就是1秒钟的帧(fps),也就是1秒钟展示的图片数量。

import cv2
#获取一个视频并打开
cap=cv2.VideoCapture('1.mp4')

if cap.isOpened():  #VideoCaputre对象是否成功打开
    print('已经打开了视频文件')
    fps = cap.get(cv2.CAP_PROP_FPS)  # 返回视频的fps--帧率
    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)  # 返回视频的宽
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 返回视频的高
    print('fps:', fps,'width:',width,'height:',height)
    i=0
    while 1:
        if i==15:
            print('保存了视频的前15帧图像,保存结束')
            break
        else:
            i=i+1
            ret, frame = cap.read()  # 读取一帧视频
            # ret 读取了数据就返回True,没有读取数据(已到尾部)就返回False
            # frame 返回读取的视频数据--一帧数据
            file_name='.\\aa\\img'+str(i)+'.jpg'
            cv2.imwrite(file_name, frame)


else:
    print('视频文件打开失败')

opencv python 版本resize函数用法

            src = cv.imread('C:\\Users\\Administrator\\Desktop\\temp0.jpg')
            resized = cv.resize(src, (1280,720), interpolation=cv.INTER_AREA)

轮廓相关操作,查找,绘制,过滤等

https://blog.csdn/iracer/article/details/90695914

轮廓相关面积,周长,重心等

使用Opencv对图像进行边缘轮廓检测,获得轮廓面积、周长等信息(Contour Features)

Python 下opencv 应用: 摄像头参数设置

Python 下opencv 应用: 摄像头参数设置
https://shliang.blog.csdn/article/details/88535234

self.cap = cv2.VideoCapture()  # 初始化摄像头
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1080)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

python opencv设置摄像头分辨率

import cv2
 
if __name__ == "__main__":
    webcam = cv2.VideoCapture(0)
    
    if not webcam.isOpened():
        print("can't open the camera!!!")
    # cv2.namedWindow("video", 0)
    # cv2.resizeWindow("video", 960, 720)
    # method 1:
    webcam.set(3, 1920)  # width=1920
    webcam.set(4, 1080)  # height=1080
    # method 2:
    # webcam.set(cv2.CAP_PROP_FRAME_WIDTH, 960)
    # webcam.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
    while True:
        ret, frame = webcam.read()
        print(frame.shape[:2])  # just need the first two values.
        cv2.imshow("video", frame)
        # Hit 'q' on the keyboard to quit!
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
 
    # Release handle to the webcam
    webcam.release()
    cv2.destroyAllWindows()

python opencv保存视频为mp4格式

#-------------------------------------#
#       调用摄像头检测
#-------------------------------------#
from keras.layers import Input
from yolo import YOLO
from PIL import Image
import numpy as np
import cv2
import time


SAVE_OUTPUT=1

yolo = YOLO()
# 调用摄像头
#capture=cv2.VideoCapture(0) #

capture=cv2.VideoCapture("C:\\Users\\Administrator\\Videos\\项目\\1_play_card\\VID_20220411_203327.mp4")
#capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
#capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
if SAVE_OUTPUT:
    #fourcc = cv2.VideoWriter_fourcc(*'XVID')
    #out = cv2.VideoWriter('output_20220411_203327.avi', fourcc, 30.0, (1920, 1080), True)
    fourcc = cv2.VideoWriter_fourcc(*'MP4V')  # 视频编解码器
    fps = capture.get(cv2.CAP_PROP_FPS)  # 帧数
    width, height = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 宽高
    out = cv2.VideoWriter('output_20220411_203327.mp4', fourcc, fps, (width, height))  # 写入视频

fps = 0.0
while(True):
    t1 = time.time()
    # 读取某一帧
    ref,frame=capture.read()
    if ref != True:
        break
    # 格式转变,BGRtoRGB
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    # 转变成Image
    frame = Image.fromarray(np.uint8(frame))

    # 进行检测
    frame = np.array(yolo.detect_image(frame))

    # RGBtoBGR满足opencv显示格式
    frame = cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
    
    fps  = ( fps + (1./(time.time()-t1)) ) / 2
    print("fps= %.2f"%(fps))
    frame = cv2.putText(frame, "fps= %.2f"%(fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.namedWindow("video", 0)
    cv2.imshow("video",frame)
    if SAVE_OUTPUT:
        out.write(frame)

    c= cv2.waitKey(3) & 0xff
    if c==27:
        capture.release()
        break
if SAVE_OUTPUT:
    out.release()
yolo.close_session()    

更多推荐

python opencv基础代码