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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 处理文件、摄像头和图形用户界面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、基本I/O腳本

1.1 讀/寫圖像文件

import numpy import cv2#利用二維Numpy數組簡單創建一個黑色的正方形圖像 img = numpy.zeros((3,3),dtype=numpy.uint8) img #結果為: ''' array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtype=uint8) ''' img.shape#結果為:(3, 3)####################################################################利用cv2.cvtColor函數將該圖像轉化為BGR格式 img1 = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) img1 #結果為: ''' 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#結果為:(3, 3, 3)

①將圖像從PNG格式轉換為JPG格式:
②將BGR圖片轉化為灰度圖片:

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

運行前:

運行后:

1.2 圖像與原始字節之間的轉換

將含有隨機字節的bytearray轉換為灰度圖像和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,顏色通道數目) cv2.imwrite('RandomColor.png',bgrImage)

運行前:

運行后:

1.3 使用numpy.array訪問圖像數據

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

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()

結果為:

將坐標(150,120的當前藍色值(127)變為255:

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()

結果為:

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

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

原始照片:
運行結果:

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

原始圖片:
運行結果:

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

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

1.4 視頻文件的讀/寫

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

讀取AVI文件(hahaha.avi)的幀,并采用YUV顏色編碼將其寫人另一個幀(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()

運行結果:

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

1.5 捕獲攝像頭的幀并保存

捕獲攝像頭10s的視頻信息,并寫入一個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()

運行結果:

1.6 在窗口顯示圖像

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

運行結果:

1.7 在窗口顯示攝像頭幀

OpenCV的窗口函數和waitKey()函數相互依賴。OpenCV 的窗口只有在調用waitKey()函數時才會更新,waitKey()函數只有在OpenCV窗口成為活動窗口時,才能捕獲輸人信息。鼠標回調雨數setMouseCallback()有五個參數。param為可選參數,它是setMouseCallback(函數的第三個參數,默認情況下,該參數是0。
實時顯示攝像頭幀,按任意鍵結束:

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()

運行結果:
回調事件參數可以取如下的值,它們分別對應不同的鼠標事件。

回調事件參數事件描述
cv2.EVENT MOUSEMOVE該事件對應鼠標移動
cv2. EVENT LBUTTONDOWN該事件對應鼠標左鍵按下
cv2. EVENT RBUTTONDOWN該事件對應鼠標右鍵按下
cv2.EVENT MBUTTONDOWN該事件對應鼠標中間鍵按下
cv2.EVENT LBUTTONUP該事件對應鼠標左鍵松開
cv2.EVENT_ RBUTTONUP該事件對應鼠標右鍵松開
cv2.EVENT MBUTTONUP該事件對應鼠標中間鍵松開
cv2.EVENT LBUTTONDBLCLK該事件對應雙擊鼠標左鍵
cv2.EVENT RBUTTONDBLCLK該事件對應雙擊鼠標右鍵
cv2.EVENT MBUTTONDBLCLK該事件對應雙擊鼠標中間鍵

鼠標回調的標志參數可能是以下事件的按位組合:

鼠標回調的標志參數對應事件描述
cv2.EVENT FLAG LBUTTON該事件對應按下鼠標左鍵
cv2.EVENT FLAG RBUTTON該事件對應按下鼠標右鍵
cv2.EVENT FLAG MBUTTON該事件對應按下鼠標中間鍵
cv2.EVENT FLAG CTRLKEY該事件對應按下Ctrl鍵
cv2.EVENT FLAG SHIFTKEY該事件對應按下Shift 鍵
cv2.EVENT FLAG ALTKEY該事件對應按下Alt鍵

OpenCV不提供任何處理窗口事件的方法。例如:當單擊窗口的關閉按鈕時,并不能關閉應用程序。

總結

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

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