圖像基礎
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()