OpenCV(01)核心图像操作、绘制,读取视频

图像基础

import cv2 as cv
#读取图像 cv.imread(path,读取方式)默认读为彩色图像
#cv.imread(path)
cat = cv.imread('E:\hqyj\code\opencv\images\\face.png')
#显示图像 cv.imshow(window,img)
cv.imshow('myimg',cat)
print(cat)
print(cat.shape)    #(h,w,c) 元组(1,1)
print(cat.dtype)    #uint8
print('=' * 50)
#设为灰度图
cat1 = cv.imread('opencv\images\\1.jpg',cv.IMREAD_GRAYSCALE)
print(cat1)
print(cat1.shape)
#保存图像 cv.imwrite(path,img)
cv.imwrite("./grey.jpg",cat1)
cv.imshow('cat',cat1)
#留下绘制时间,cv.waitKey(n)等待n毫秒
cv.waitKey(0)
#释放资源
cv.destroyAllWindows()

图像剪裁、绘制

  • 剪裁
import numpy as np
import cv2 as cv
pig=cv.imread('opencv\images\pig.png')
cv.imshow('pig',pig)
#切片(409,349),(534,415)(w,h)
nose=pig[329:429,410:539]   #(y:y+h,x,x+w)
cv.imshow('dst',nose)
cv.waitKey(0)
cv.destroyAllWindows()
  • 绘制
import numpy as np
import cv2 as cv
pig=cv.imread('opencv\images\pig.png')
#绘制直线 cv.line(img,start,end,color,thickness) (w,h)
cv.line(pig,(400,212),(584,217),(0,0,255),5)
cv.line(pig,(400,212),(414,78),(0,0,255),5)
cv.line(pig,(584,217),(605,72),(0,0,255),5)
#绘制矩形 cv.rectangle(img,start,end,color,thickness) thickness=-1 填充
cv.rectangle(pig,(409,349),(534,415),(0,255,0),-1)
#绘制圆形 cv.circle(img,center,radius,color,thickness)
#cv.LINE_AA 反走样技术、抗锯齿、圆滑,默认使用LINE_8
cv.circle(pig,(400,212),50,(0,0,0),-1,cv.LINE_AA)
cv.circle(pig,(584,217),50,(0,0,0),-1,cv.LINE_AA)
cv.imshow('pig',pig)
cv.waitKey(0)
cv.destroyAllWindows()

黑、白&随机像素值图像

import numpy as np
import cv2 as cv
#创建一个全零数组 表示黑色图像
height, width, c = 360, 480, 3
black = np.zeros((height,width,c), np.uint8)
cv.imshow('black',black)
#使用np.full() 创建白色图像
white = np.full((360,480,3),fill_value=255, dtype=np.uint8)
cv.imshow('white',white)
#索引修改像素值 表示白色图像
black[:,:,:] = 255
# black[:,:] = 255
# black[:] = 255
cv.imshow('W',black)
#创建随机像素值的图像
dst = np.random.randint(0,255,(360,480,3),dtype=np.uint8)   #左闭右开,255取不到
cv.imshow('random',dst)
cv.waitKey(0)
cv.destroyAllWindows()

读取视频

import cv2 as cv
#创建一个videocaptrue对象
#cv.VideoCapture()
#cap=cv.VideoCapture('opencv/images/videocap.mp4')
#获取实时视频流
cap=cv.VideoCapture(0)
#循环读取每一帧图像
while True:
#调用read方法读取每一帧图像
ret,img = cap.read()	#布尔值ret,帧图像img
#判断是否读取成功
if not ret:
print('error!')
break
cv.imshow('video',img)
key = cv.waitKey(1)&0xFF
if key == ord('q') or key == ord('Q'):
break
cap.release()	#停止视频捕获,关闭摄像头或释放视频文件,并释放所有相关资源
cv.destroyAllWindows()

调整图像大小

import cv2 as cv
import numpy as np
#读取图像
pig=cv.imread('opencv\images\\pig.png')
print(pig.shape)
#调整图像大小cv.resize(img,(w,h,c))
#使用插值算法来计算新像素的值,从而在调整尺寸时保持图像的平滑性和质量。
pig2=cv.resize(pig,(480,520))
cv.imshow('old',pig)
cv.imshow('pig2',pig2)
print(pig2.shape)
#np.reshape(img,(h,w,c))
#reshape保持像素个数不变,只是重构元组数据,不推荐使用
# pig3=np.reshape(pig2,(520,480,3))
# cv.imshow('pig3',pig3)
cv.waitKey(0)
cv.destroyAllWindows()
posted @ 2025-07-26 09:34  wzzkaifa  阅读(9)  评论(0)    收藏  举报