日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

精简 opencv python_01_opencv_python_基本图像处理

發布時間:2025/3/20 python 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精简 opencv python_01_opencv_python_基本图像处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

cv2.IMREAD_COLOR:彩色圖像

cv2.IMREAD_GRAYSCALE:灰度圖像

import cv2 #opencv讀取的格式是BGR

importmatplotlib.pyplot as pltimportnumpy as np%matplotlib inline

# img讀入的本質上就是數組

img= cv2.imread('cat.jpg')

#圖像的顯示,也可以創建多個窗口

cv2.imshow('image',img)#等待時間,毫秒級,0表示任意鍵終止

cv2.waitKey(0)

cv2.destroyAllWindows()

我們來將上述圖像顯示的代碼封裝成一個函數

defcv_show(name,img):

cv2.imshow(name,img)

cv2.waitKey(0)

cv2.destroyAllWindows()

我們可以看看圖像的各種基本信息

print(img.shape) #圖片形狀(h, w, c)

#讀取灰度圖 -->通道數 c == 1

img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)

img#看看圖片的類型 numpy.ndarray

type(img)#圖片的size = h * w * c

img.size#圖片中數據的類型 比如uint8 float32

img.dtype

保存圖片

#('路徑/保存圖片名字', 要保存的圖片)

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

1.2??數據讀取-視頻

cv2.VideoCapture可以捕獲攝像頭,用數字來控制不同的設備,例如0,1。

如果是視頻文件,直接指定好路徑即可。

vc = cv2.VideoCapture('test.mp4')

#檢查是否打開正確

ifvc.isOpened():

oepn, frame=vc.read()else:

open= False

whileopen:

ret, frame=vc.read()if frame isNone:break

if ret ==True:

gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

cv2.imshow('result', gray)if cv2.waitKey(100) & 0xFF == 27:breakvc.release()

cv2.destroyAllWindows()

1.3? 錄制視頻

import cv2#導入opencv包

video=cv2.VideoCapture(0)#打開攝像頭

fourcc= cv2.VideoWriter_fourcc(*'XVID')#視頻存儲的格式

fps = video.get(cv2.CAP_PROP_FPS)#幀率#視頻的寬高

size =(int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), \

int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))

out= cv2.VideoWriter('video.avi', fourcc, fps, size)#視頻存儲

whileout.isOpened():

ret,img=video.read()#開始使用攝像頭讀數據,返回ret為true,img為讀的圖像

if ret is False:#ret為false則關閉

exit()

cv2.namedWindow('video',cv2.WINDOW_AUTOSIZE)#創建一個名為video的窗口

cv2.imshow('video',img)#將捕捉到的圖像在video窗口顯示

out.write(img)#將捕捉到的圖像存儲

#按esc鍵退出程序

if cv2.waitKey(1) & 0xFF ==27:

video.release()#關閉攝像頭

break

1.4??截取部分圖像數據

img=cv2.imread('cat.jpg')

cat=img[0:100,0:200]

cv_show('cat',cat)

1.5??色彩空間API

defcolor_space_demo(src):

img=cv2.imread(src)#轉成灰度圖

gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv_show("gray", gray)#轉成HSV

hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv_show('hsv', hsv)#hsv轉成rgb(bgr)

img =cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

cv_show('hcv2img', img)#yuv...也可以轉

1.5.1??基于顏色提出目標(先轉成hsv格式)

defextrace_object_demo(src):

img= cv2.imread(src) #通道數是3

#print(img.shape)

img_binary = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #通道數是 1

#print(img_binary.shape)

#1.將RGB轉換成HSV色彩空間

hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV)#print(hsv.shape)

#2.定義數組,說明你要提取(過濾)的顏色目標

#三通道,所以是三個參數

#紅色

lower_hsv_r = np.array([156, 43, 46])

upper_hsv_r= np.array([180, 255, 255])#3.進行過濾,提取,得到二值圖像

mask_red = cv2.inRange(hsv, lower_hsv_r, upper_hsv_r) #通道數是 1

#print(mask_red.shape)

#4.展示成果

cv_show('original', img)

cv_show('mask_red', mask_red)#5.合并展示

res =np.hstack((img_binary, mask_red))

cv_show("hastck", res)return mask_red

1.6??顏色通道提取與合并

#提取

b,g,r=cv2.split(img)print(b.shape)#合并

img =cv2.merge((b,g,r))print(img.shape)

#只保留R

cur_img =img.copy()

cur_img[:,:,0]=0

cur_img[:,:,1] =0

cv_show('R',cur_img)

1.7??邊界填充

BORDER_REPLICATE:復制法,也就是復制最邊緣像素。

BORDER_REFLECT:反射法,對感興趣的圖像中的像素在兩邊進行復制例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:反射法,也就是以最邊緣像素為軸,對稱,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包裝法cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常數值填充。

top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate= cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)

reflect=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)

reflect101=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)

wrap=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)

constant= cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

importmatplotlib.pyplot as plt

plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')

plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')

plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')

plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')

plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')

plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')

plt.show()

1.8? 圖像融合

必須保證要融合的圖片shape一致

img_cat=cv2.imread('cat.jpg')

img_dog=cv2.imread('dog.jpg')

img_cat+img_dog#ValueError: operands could not be broadcast together with shapes (414,500,3) (429,499,3)

#將狗狗的圖片和貓貓的圖片resize一樣

img_dog = cv2.resize(img_dog, (500, 414))#選擇融合的權重

res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)#展示結果

plt.imshow(res)

進一步演示resize的用法

#將貓貓的圖片放大

res = cv2.resize(img, (0, 0), fx=4, fy=4)

plt.imshow(res)

res = cv2.resize(img, (0, 0), fx=1, fy=3)

plt.imshow(res)

總結

以上是生活随笔為你收集整理的精简 opencv python_01_opencv_python_基本图像处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。