日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

处理文件、摄像头和图形用户界面

發(fā)布時(shí)間:2023/12/1 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理文件、摄像头和图形用户界面 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、基本I/O腳本

1.1 讀/寫圖像文件

import numpy import cv2#利用二維Numpy數(shù)組簡單創(chuàng)建一個(gè)黑色的正方形圖像 img = numpy.zeros((3,3),dtype=numpy.uint8) img #結(jié)果為: ''' array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtype=uint8) ''' img.shape#結(jié)果為:(3, 3)####################################################################利用cv2.cvtColor函數(shù)將該圖像轉(zhuǎn)化為BGR格式 img1 = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) img1 #結(jié)果為: ''' array([[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]]], dtype=uint8) ''' img1.shape#結(jié)果為:(3, 3, 3)

①將圖像從PNG格式轉(zhuǎn)換為JPG格式:
②將BGR圖片轉(zhuǎn)化為灰度圖片:

import cv2image = cv2.imread("result.png") cv2.imwrite("show.jpg",image)grayImage = cv2.imread('result.png',cv2.IMREAD_GRAYSCALE) cv2.imwrite('gray.png',grayImage)

運(yùn)行前:

運(yùn)行后:

1.2 圖像與原始字節(jié)之間的轉(zhuǎn)換

將含有隨機(jī)字節(jié)的bytearray轉(zhuǎn)換為灰度圖像和BGR圖像:

import cv2 import numpy import osrandomByteArray = bytearray(os.urandom(120000)) flatNumpyArray = numpy.array(randomByteArray)grayImage = flatNumpyArray.reshape(300,400)#(y,x) cv2.imwrite('RandomGray.png',grayImage)bgrImage = flatNumpyArray.reshape(100,400,3)#(y,x,顏色通道數(shù)目) cv2.imwrite('RandomColor.png',bgrImage)

運(yùn)行前:

運(yùn)行后:

1.3 使用numpy.array訪問圖像數(shù)據(jù)

將BGR圖像在(10,10)處的像素轉(zhuǎn)換為紅像素

import cv2 import numpy as npimg = cv2.imread("result.png") img[10,10] = [0,0,255]#[B,G,R] cv2.imshow('yy',img) cv2.waitKey(0) cv2.destroyAllWindows()

結(jié)果為:

將坐標(biāo)(150,120的當(dāng)前藍(lán)色值(127)變?yōu)?55:

import cv2 import numpy as np img = cv2.imread("result.png") print(img.item(50,20,0)) #pixel img.itemset((150,20,0),255) print(img.item(50,20,0)) cv2.imshow('yy',img) cv2.waitKey(0) cv2.destroyAllWindows()

結(jié)果為:

操作通道:將指定通道(B,G,R)的值置為零,下列代碼將圖像所有的R通道設(shè)置為0(黑色),為了是效果更加明顯,這里將圖片選擇純紅色的彩色照片。

import cv2 import numpy as np img = cv2.imread("red.jpg") img[:,:,2] = 0 cv2.imshow('yy',img) cv2.waitKey(0) cv2.destroyAllWindows()

原始照片:
運(yùn)行結(jié)果:

將該區(qū)域與變量綁定,然后設(shè)定第二個(gè)區(qū)域,并將第二個(gè)區(qū)域的值分配給第二個(gè)區(qū)域(將圖像的一部分拷貝到改該圖像的另一個(gè)位置)

原始圖片:
運(yùn)行結(jié)果:

獲得圖像屬性:
shape::Numpy返回包含寬度、高度和通道數(shù)(如果圖像是彩色的)的數(shù)組,這在調(diào)試圖像類型時(shí)很有用:如果圖像是單色或灰度的,將不包含通道值。
size:該屬性是指圖像像素的大小。
datatype:該屬性會(huì)得到圖像的數(shù)據(jù)類型(通常為一個(gè)無符號(hào)整數(shù)類型的變量和該類
型占的位數(shù),比如uint8類型)。

import cv2 import numpy as np img = cv2.imread("result.png") print(img.shape)#結(jié)果為:(250, 250, 3) print(img.size)#結(jié)果為:187500 print(img.dtype)#結(jié)果為:uint8

1.4 視頻文件的讀/寫

Opencv提供了 Video Capture類和 Videowriter類來支持各種格式的視頻文件。支持的格式類型會(huì)因系統(tǒng)的不同而變化,但應(yīng)該都支持AWI格式。在到達(dá)視頻文件末尾之前,Video Capture類可通過 reado函數(shù)來獲取新的幀,每幀是一幅基于BGR格式的圖像。
可將一幅圖像傳遞給 Video Writer類的 write(0函數(shù),該函數(shù)會(huì)將這幅圖像加到Videowriter類所指向的文件中。

讀取AVI文件(hahaha.avi)的幀,并采用YUV顏色編碼將其寫人另一個(gè)幀(xixixi.flv)中:

import cv2 videoCapture = cv2.VideoCapture("hahaha.avi") fps = videoCapture.get(cv2.CAP_PROP_FPS) size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) videoWriter = cv2.VideoWriter('xixixi.flv',cv2.VideoWriter_fourcc('F','L','V','1'),fps,size)success,frame = videoCapture.read() while success:videoWriter.write(frame)success,frame = videoCapture.read()

運(yùn)行結(jié)果:

代碼文件擴(kuò)展名備注
cv2.VideoWriter fouree (T’, ‘4’,‘2’,‘0’).avi該選項(xiàng)是一一個(gè)未壓縮的YUV顏色編碼,是4:2:0色度子采樣。這種編碼有很好的兼容性,但會(huì)產(chǎn)生較大文件。
cv2.VideoWriter_ fouree (‘P’,T’, ‘M’, ‘1’).avi該選項(xiàng)是MPEG-1編碼類型。
cv2.VideoWriter_ fourcc (‘X’, ‘V’,T, ‘D’).avi該選項(xiàng)是MPEG-4編碼類型,如果希望得到的視頻大小為平均值,推薦使用此選項(xiàng)。
cv2.VideoWriter_ fourcc(‘T’,‘H’,‘E’ ,‘O’).ogv該選項(xiàng)是Ogg Vorbis
cv2.VideoWriter_ fourcc (‘F’,‘L’, ‘V’, ‘1’).flv該選項(xiàng)是一個(gè)Flash視頻

1.5 捕獲攝像頭的幀并保存

捕獲攝像頭10s的視頻信息,并寫入一個(gè)AVI文件中:

import cv2cameraCapture = cv2.VideoCapture(0) fps = 30 size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))) videoWriter = cv2.VideoWriter("siqi.avi",cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame = cameraCapture.read() numFramesRemaining = 10*fps-1 while success and numFramesRemaining > 0:videoWriter.write(frame)success,frame = cameraCapture.read()numFramesRemaining -= 1 cameraCapture.release()

運(yùn)行結(jié)果:

1.6 在窗口顯示圖像

import cv2 import numpy as npimg = cv2.imread("gray.png") cv2.imshow('siqi_show',img) cv2.waitKey() cv2.destroyAllWindows()

運(yùn)行結(jié)果:

1.7 在窗口顯示攝像頭幀

OpenCV的窗口函數(shù)和waitKey()函數(shù)相互依賴。OpenCV 的窗口只有在調(diào)用waitKey()函數(shù)時(shí)才會(huì)更新,waitKey()函數(shù)只有在OpenCV窗口成為活動(dòng)窗口時(shí),才能捕獲輸人信息。鼠標(biāo)回調(diào)雨數(shù)setMouseCallback()有五個(gè)參數(shù)。param為可選參數(shù),它是setMouseCallback(函數(shù)的第三個(gè)參數(shù),默認(rèn)情況下,該參數(shù)是0。
實(shí)時(shí)顯示攝像頭幀,按任意鍵結(jié)束:

import cv2clicked = False def onMouse(event,x,y,flags,param):global clickedif event == cv2.EVENT_LBUTTONUP:clicked = TruecameraCapture = cv2.VideoCapture(0) cv2.namedWindow('siqi') cv2.setMouseCallback('siqi',onMouse)print('press any key to stop!') success,frame = cameraCapture.read() while success and cv2.waitKey(1) == -1 and not clicked:cv2.imshow('siqi',frame)success,frame = cameraCapture.read()cv2.destroyWindow('siqi') cameraCapture.release()

運(yùn)行結(jié)果:
回調(diào)事件參數(shù)可以取如下的值,它們分別對(duì)應(yīng)不同的鼠標(biāo)事件。

回調(diào)事件參數(shù)事件描述
cv2.EVENT MOUSEMOVE該事件對(duì)應(yīng)鼠標(biāo)移動(dòng)
cv2. EVENT LBUTTONDOWN該事件對(duì)應(yīng)鼠標(biāo)左鍵按下
cv2. EVENT RBUTTONDOWN該事件對(duì)應(yīng)鼠標(biāo)右鍵按下
cv2.EVENT MBUTTONDOWN該事件對(duì)應(yīng)鼠標(biāo)中間鍵按下
cv2.EVENT LBUTTONUP該事件對(duì)應(yīng)鼠標(biāo)左鍵松開
cv2.EVENT_ RBUTTONUP該事件對(duì)應(yīng)鼠標(biāo)右鍵松開
cv2.EVENT MBUTTONUP該事件對(duì)應(yīng)鼠標(biāo)中間鍵松開
cv2.EVENT LBUTTONDBLCLK該事件對(duì)應(yīng)雙擊鼠標(biāo)左鍵
cv2.EVENT RBUTTONDBLCLK該事件對(duì)應(yīng)雙擊鼠標(biāo)右鍵
cv2.EVENT MBUTTONDBLCLK該事件對(duì)應(yīng)雙擊鼠標(biāo)中間鍵

鼠標(biāo)回調(diào)的標(biāo)志參數(shù)可能是以下事件的按位組合:

鼠標(biāo)回調(diào)的標(biāo)志參數(shù)對(duì)應(yīng)事件描述
cv2.EVENT FLAG LBUTTON該事件對(duì)應(yīng)按下鼠標(biāo)左鍵
cv2.EVENT FLAG RBUTTON該事件對(duì)應(yīng)按下鼠標(biāo)右鍵
cv2.EVENT FLAG MBUTTON該事件對(duì)應(yīng)按下鼠標(biāo)中間鍵
cv2.EVENT FLAG CTRLKEY該事件對(duì)應(yīng)按下Ctrl鍵
cv2.EVENT FLAG SHIFTKEY該事件對(duì)應(yīng)按下Shift 鍵
cv2.EVENT FLAG ALTKEY該事件對(duì)應(yīng)按下Alt鍵

OpenCV不提供任何處理窗口事件的方法。例如:當(dāng)單擊窗口的關(guān)閉按鈕時(shí),并不能關(guān)閉應(yīng)用程序。

總結(jié)

以上是生活随笔為你收集整理的处理文件、摄像头和图形用户界面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。