图像基础
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 cvpig=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 cvpig=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!')breakcv.imshow('video',img)key = cv.waitKey(1)&0xFFif key == ord('q') or key == ord('Q'):breakcap.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()