opencv-python獲取圖像:面向對象與面向過程

2021-01-11 青楓流雲

獲取圖像的方式有:1,讀取本地圖片,2,調用筆記本自帶攝像頭或usb攝像頭,3,調用網絡攝像頭。

這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:

Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

下面讀取一張圖片並顯示

讀取圖片

學過數字圖像處理的小夥伴應該很熟悉,在數字圖像處理課上,這是一張標準的測試圖片。關於圖片的來源:1973年6月,美國南加州大學的信號圖像處理研究所的一個助理教授和他的一個研究生打算為了一個學術會議找一張數字照片,而他們對於手頭現有成堆"無聊"照片感到厭煩。事實上他們需要的是一個人臉照片,同時又能讓人眼前一亮。這時正好有人走進實驗室,手上帶著一本當時的花花公子雜誌,結果故事發生了……而限於當時實驗室設備和測試圖片的需要,lenna的圖片只摳到了原圖的肩膀部分。

Lena圖像在科研領域流行的原因:1.該圖適度的混合了細節、平滑區域、陰影和紋理,從而能很好的測試各種圖像處理算法。2.Lenna是個美女,對於圖像處理界的研究者(大部分都是男性)來說,美女圖可以有效地吸引他們來做研究。

下面是分別用面向過程與面向對象的編程方法實現讀取本地圖像和打開攝像頭兩段代碼:

# -*- coding: utf-8 -*-

"""

面向過程的編程方法,用函數把解決問題的步驟一步一步實現。

運行環境:win10系統 python==3.6 opencv-contrib-python== 4.1.0

第一行「# -*- coding: utf-8 -*-」 告訴Python解釋器,按照UTF-8編碼讀取原始碼

"""

import cv2

image=cv2.imread('lena.JPG') #讀取本地圖片,圖片與源文件放在一起

cv2.imshow("lena",image) #顯示

#

#調用攝像頭,cv2.VideoCapture(0),0表示使用默認攝像頭,如果有多個攝像頭,填寫不同的數字即可

#

#調用網絡攝像頭# 根據攝像頭設置IP及rtsp埠(手上沒有網絡攝像頭,沒有測試)

#url = 'rtsp://account:password@192.168.0.35:554/11'

#camera = cv2.VideoCapture(url)

#

camera = cv2.VideoCapture(0) #使用默認攝像頭

while(True):

ret,frame = camera.read() #frame圖片,參數ret為True 或False,代表是否讀取成功

cv2.imshow('camera',frame) #顯示

K=cv2.waitKey(10) #等待10ms,並檢測按鍵

if K == 27: #按下 Esc 退出,窗口活動時有效

break

camera.release() #釋放攝像頭

cv2.waitKey(0) #等待按下任意鍵,窗口活動時有效

cv2.destroyAllWindows() #銷毀所有窗口

# -*- coding: utf-8 -*-

"""

定義類,面向對象的編程方法,程序設計的重點在於數據而不是步驟,以功能來劃分問題

運行環境 python==3.6 opencv-contrib-python== 4.1.0 win10系統

第一行 「 # -*- coding: utf-8 -*- 」 告訴Python解釋器,按照UTF-8編碼讀取原始碼

"""

#圖像獲取

import cv2

import numpy as np

#

class image():

#創建一個 image類

def __init__(self, name,model=0): # 構造函數

#初始化屬性

self.name = name

self.model = model # 給屬性指定默認值

def read(self): # 定義一個read()方法 讀取本地圖片

self.image=cv2.imread(self.model) #讀取本地圖片

def openCamera(self): # 定義一個 openCamera()方法

self.camera = cv2.VideoCapture(self.model) #使用默認攝像頭

def run(self): # 定義一個run()方法

self.ret,self.image = self.camera.read() #image圖片,參數ret為True 或False,代表是否讀取成功

def close(self):

self.camera.release() #釋放攝像頭

#

if __name__ == '__main__':

」」」

if __name__ == '__main__': 的作用

python代碼文件使用時有兩種方法,1,直接作為腳本執行,有沒有if __name__ == 'main':這 句無影響。2,import到其他的python腳本執行。如果沒有if __name__ == 'main': 時,想import 到其他的python腳本調用此腳本裡面的函數時會執行整個python代碼,而我們只想調用某個函 數,這時就要加上if __name__ == 'main':這句了。

」」」

m1=image("image1",0)

m1.openCamera()

while(1):

m1.run()

image1=m1.image

cv2.imshow('camera',image1) #顯示

K=cv2.waitKey(500) #等待按下任意鍵,窗口活動時有效

if K == 27: #按下 Esc 退出,窗口活動時有效

m1.close()

break

cv2.destroyAllWindows() #銷毀所有窗口

#

m2=image("image2",model='lena.JPG')

m2.read()

cv2.imshow(lena,m2.image)

cv2.waitKey(0)

cv2.destroyAllWindows() #銷毀所有窗口

面向過程性能更高,面向對象易維護、易復用、易擴展。兩種方法各有各的優勢,使用時要根據實際情況選擇。

相關焦點

  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • 你真的理解 Python 面向對象?
    __doc__      # 自動獲取第四個參數中設置的值:description...__dict__# 獲取 對象obj1 的成員# 輸出:{'count': 10000, 'name': 'HeBei'}obj2 = Province('HeNan', 3888)print obj2.
  • Python 中的面向對象沒有意義
    【CSDN 編者按】許多人都在抨擊面向對象,雖然我不認為他有什麼問題
  • 使用Python+OpenCV進行面部合成
    原文 http://www.learnopencv.com/face-morph-using-opencv-cpp-python/
  • 使用OpenCv和Dlib進行打哈欠檢測
    Dlib: Dlib是一個Python庫,包含了數據挖掘、數據結構、機器學習、圖像處理等工具。打哈欠檢測與應用打哈欠檢測就是使用OpenCV和Dlib來檢測打哈欠(由於疲勞或無聊而張大嘴巴深吸氣)。可廣泛應用於自駕車、駕駛員疲勞檢測、駕駛員睡意檢測、駕駛員意識檢測等領域。
  • python 面向對象_1
    總感覺,對於面向對象這一思想,自己還理解不透,趁著放假,再過一遍。_": phone1 = Phone() phone1.note = '---我是phone1的note---' phone1.address_book = [{"159008867454": "於鵬"}, {"159008860000": "曉偉"}]     print('---我是phone1對象
  • 專家解析UML面向對象分析過程及包含圖形
    專家解析UML面向對象分析過程及包含圖形 本文向大家介紹一下UML面向對象分析及其包括的圖、建模步驟,在學習UML建模語言的過程中,你可能會遇到UML面向對象問題,這裡和大家分享一下。
  • 基於python+opencv的圖像目標區域自動提取
    檢測矩形並提取坐標需要對圖像進行預處理、邊緣檢測、提取輪廓、檢測凸包、角點檢測。由於執行該函數時會直接修改圖像,因此我們複製一份圖像之傳給cv2.findContours();同時,OpenCV提供了cv2.drawContour()函數繪可以把輪廓疊加到另一張圖片上。下面的代碼使用cv2.findContours()函數對mask圖片提取輪廓,並調用cv2.drawContour()把輪廓疊加在原始圖像。
  • Python實時獲取攝像頭,給自己P上墨鏡菸斗特效
    這些往往都是用到 人臉識別+圖像處理 實現的。這方面,Python也很擅長。今天我們就分享一種利用Python獲取攝像頭圖像,並加上墨鏡菸斗特效的案例。1.從攝像頭獲取視頻流,並轉換為一幀一幀的圖像,然後將圖像信息傳遞給opencv這個工具庫處理,返回灰度圖像(就像你使用本地靜態圖片一樣)2.程序啟動後,根據監聽器信息,使用一個while循環,不斷的加載視頻圖像,然後返回給opencv工具呈現圖像信息。3.創建一個鍵盤事件監聽,按下"d"鍵,則開始執行面部匹配,並進行面具加載(這個過程是動態的,你可以隨時移動)。
  • 武大學生用Python敲出櫻花開放 | 附源碼
    相約武大官博,每天看不同地點的櫻花同時武大信管院的朱永春同學,用python敲出櫻花開放,引發熱搜。武大微博後來還開源了代碼:這樣我們也能在自己的電腦上實現櫻花開放全過程首先,使用 opencv 的 cv2.imwrite() 函數讀寫,再保存為』.jpeg』後綴的圖像cv2.imwrite("
  • 定製炒股軟體時的面向對象
    隨著需求一再提高以及各種軟體開發方法的逐步發展,甚至是完善,面向對象開發方法越來越成為人們關注的重點。與之相比,傳統炒股軟體開發方法的軟體重用性能非常差,開發出一個軟體並不能被多次重複使用;軟體的可維護性也達不到需求,一旦文檔資料丟失之後,就很難修復,即使最後能被修復,其代價和成本非常高昂。
  • OpenCV黑魔法之隱身衣 | 附源碼
    文末會分享 C++和python的代碼。哈利波特的隱身衣效果那是哈利·波特在試他的隱形衣!事實上,你可以用一種叫做顏色檢測和分割的圖像處理技術來創造這種神奇的體驗。好消息是,你不需要成為霍格沃茨的一員!你所需要的是一塊紅色的布,並遵循這篇文章。看看下面的視頻,我在那裡嘗試我自己的隱形衣!
  • Python 圖像處理 OpenCV (15):圖像輪廓
    本篇文章是關於圖像處理輪廓方面的,下面開始正文,希望能幫到各位。Q:什麼是輪廓?A:輪廓是一系列相連的點組成的曲線,代表了物體的基本外形,相對於邊緣,輪廓是連續的,邊緣並不全部連續。特徵矩特徵矩可以幫助我們計算一些圖像的特徵,例如物體的質心,物體的面積等,使用的函數為 moments() 。
  • python圖像處理-gif動圖
    圖片合成動圖導入os庫,利用listdir方法將lion文件夾中的圖片全部讀取出來,循環打開每一張圖片,接著將圖片對象添加到frames列表中,最後利用save方法,保存為一張動圖。python圖像處理-1
  • 如何用C語言實現面向對象編程OOP?
    如何用C語言實現面向對象編程OOP? 嵌入式資訊精選 發表於 2020-12-18 16:18:19 解釋區分一下C語言和OOP我們經常說C語言是面向過程的,而C++是面向對象的,然而何為面向對象,什麼又是面向過程呢?
  • Java之面向對象的封裝性和private關鍵字的使用
    各位小夥伴大家好,我們知道在Java當中,面向對象中有三大特徵,繼承性,封裝性,多態性,這次小編要介紹的是Java當中面向對象的封裝性。在Java當中,封裝性有兩種,一種是方法的封裝性,另一種關鍵字的封裝性。小編先介紹方法的封裝性。
  • 面向對象中包括哪些UML圖及每件圖的作用
    面向對象中包括哪些UML圖及每件圖的作用 本文向大家介紹一下UML面向對象分析及其包括的UML圖、建模步驟,在學習UML建模語言的過程中,你可能會遇到UML面向對象問題,希望對你學習有所幫助。
  • 手把手:使用OpenCV進行面部合成— C++ / Python
    (2)這就是合成過程,我們已經完成了。現在,讓我們去給川普投票吧!開玩笑的!就像川普一樣,我省略掉了一些重要的細節。讓我們從獲取對應點開始。首先,我們可以通過檢測面部特徵點自動(或手工)獲得大量像素點。我用dlib庫檢測到68個對應點。接下來,我手工增加了4個點(1個在右側耳朵,1個在脖子處,2個在肩膀處)。
  • [3]小度太弱了,乾脆自己用Python開發個對話機器人【爬蟲,資料庫,面向對象,人工智慧】
    也可以公眾號回復笑話或者笑笑獲取原始碼。先在speakers目錄下創建文件夾xunfei把pcm格式轉換成wav格式 pcm2wav.py訊飛提供的音頻是wav格式,我們需要先把它轉換成常用格式,如wav。為了做這個轉換,我們需要安裝wave包。
  • Java面向對象特徵——多態
    多態1.什麼是多態、如何實現面向對象的三大特徵之一:多態多態的定義:某一類事物的多種存在方式(一個對象,兩種形態)上圖代碼所示,在Dog類繼承Animal時,在new對象的時候,對象的引用類型可以為Animal類,父類或者接口的引用指向其子類的對象,這就是多態的實現。