Pthon圖像處理Opencv初步:色彩轉換、打開攝像頭

文章目錄

    • 處理流程
    • 顏色空間
    • 二值圖像
    • 攝像頭

python圖像處理教程:初步📷插值變換📷形態學處理📷濾波

處理流程

opencv是跨平臺圖像處理庫,為許多編程語言提供了接口,Python自然在列,但在使用pip安裝時需要注意install的是【opencv-python】。

作為專業的圖像處理庫,opencv自然也提供了讀取、處理、顯示以及保存圖片的全流程功能,其初步使用如下

import cv2path = 'lena.jpg'
img=cv2.imread(path)
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)cv2.imshow("img",img)
cv2.imshow("gray",img_gray)cv2.waitKey(0)
cv2.destroyAllWindows()

其中

  • imread用于讀取圖片。
  • cvtColor用于轉換圖片的色彩空間,【COLOR_RGB2GRAY】表示將RGB圖像轉換為灰度圖像。
  • imshow用于顯示圖片,其兩個輸入分別是窗口名稱與將要顯示的圖像。
  • waitKey 等待按下鍵盤,輸入為等待時間,為0則表示不接受按鍵。
  • destroyAllWindows 用于關閉所有窗口。

彈出窗口如下。

在這里插入圖片描述

顏色空間

在opencv中,通過cvtColor函數可以完成色彩空間的轉換,其輸入參數分別是待轉換圖像和轉換方法,其轉換方法是已經整形常量,其變量名稱類似于【RGBA2GRAY】,2即To,表示從一種顏色空間轉向另一種。

GRAY即灰度圖像,只有一個通道,除此之外,opencv還提供了許多種顏色空間,下面列舉三種。

人類對顏色的感知,主要是通過紅、綠、藍這三種感光細胞實現的,正因如此,RGB格式的圖像才如此普遍地被接受。如果再加上透明通道Alpha,則構成RGBA格式的圖像。在opencv中,其通道順序并不一定全都是紅綠藍,也可能是藍綠紅,即BGR。

但是,人類并不能感知不同顏色疊加前后的關聯,即我們所認知的色彩并不能簡單地被三原色直觀地表示。為此出現了另一種顏色空間,即HSV,這三個字母分別表示色相、飽和度以及明度。

如果進一步研究人類對顏色的感知,可以將色彩空間分為兩個相互正交的色調,即紅綠色軸(a)和藍黃軸(b),通過這兩個通道就可以表示所有的顏色,再加上亮度值L,就構成了Lab色彩空間。

二值圖像

從顏色空間的定義來說,黑白圖像也應位列其中,只不過這個空間過于狹窄,只有黑白兩個數值。而其轉換方式也很簡單,只需設置一個閾值 T T T,讓像素灰度大于 T T T的置為白色,否則置為黑色,若 T T T不同,則轉換結果不同。

由于多了一個參數,故而opencv并未將其作為一種轉換類型,而是提供了另一個專用的二值化函數threshold,這個函數通過指定閾值和二值化類型,以實現從灰度圖到二值圖像的轉換,當閾值不同時,lena圖的二值化情況如下

在這里插入圖片描述

bImgs = {}
for th in [50, 100, 150]:ret, bImg = cv2.threshold(img_gray, th, 255, cv2.THRESH_BINARY)bImgs[f"th={th}"] = bImgfor i,key in enumerate(bImgs,1):cv2.namedWindow(key, cv2.WINDOW_NORMAL)cv2.resizeWindow(key, 256, 256)cv2.moveWindow(key, 256*i, 300)cv2.imshow(key, bImgs[key])cv2.waitKey(0)

threshold的輸入參數分別是灰度圖像、閾值、默認值以及二值化類型,【THRESH_BINARY】表示,當灰度值小于閾值時置0,大于閾值時設為默認值,在本例中就是255。

此外,在打開多個窗口時,用到了resizeWindow和moveWindow來更改窗口尺寸以及移動窗口。

攝像頭

除了打開圖像文件之外,在opencv中還可以創建VideoCapture對象,可以讀取攝像頭。下面就打開電腦自帶的相機,并將其影像二值化之后展示,效果如下

在這里插入圖片描述

繪圖代碼如下。

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
flag = cap.isOpened()
index = 1
while (flag):ret, frame = cap.read()gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)ret, bImg = cv2.threshold(gray, 125, 255, cv2.THRESH_BINARY)cv2.imshow("camera", bImg)k = cv2.waitKey(1) & 0xFFif k == ord('s'):cv2.imwrite(f"{index}.jpg", bImg)print(f"save{index}.jpg successfuly!")index += 1elif k == ord('q'):breakcap.release()
cv2.destroyAllWindows()

其中,cap即為VideoCapture對象,cap.read用于讀取當前幀,其返回值ret是一個成功判定符,frame即為抓取到的圖像。在讀取圖像之后,將其轉灰度,并進行二值化,最后在"camera"窗口中顯示。

接下來捕捉按鍵,當檢測到按下【s】時,調用imwrite保存圖像;當檢測到【q】時,退出窗口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718176.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

32單片機基礎:PWM驅動舵機,直流電機

PWM驅動舵機 接線圖如上圖所示。注意,舵機的5V 線不能接到面包板上的正極,面包板上的正極只有3.3V,是STM32提供的,所以要接到STLINK的5V, 我們如何驅動舵機呢?由之前我們介紹原理知道,要輸出如下圖對應的PWM波形才行…

AWTK 開源串口屏開發(11) - 天氣預報

# AWTK 開源串口屏開發 - 天氣預報 天氣預報是一個很常用的功能,在很多設備上都有這個功能。實現天氣預報的功能,不能說很難但是也絕不簡單,首先需要從網上獲取數據,再解析數據,最后更新到界面上。 在 AWTK 串口屏中…

數字革命的浪潮:Web3如何改變一切

隨著數字技術的不斷發展,人類社會正迎來一場前所未有的數字革命浪潮。在這個浪潮中,Web3技術以其去中心化、安全、透明的特性,正在逐漸改變著我們的生活方式、商業模式以及社會結構。本文將深入探討Web3技術如何改變一切,以及其所…

volatile關鍵字的作用 以及 單例模式(餓漢模式與懶漢模式的區別及改進)

文章目錄 💡volatile保證內存可見性💡單例模式💡餓漢模式💡懶漢模式💡懶漢模式多線程版💡volatile防止指令重排序 💡volatile保證內存可見性 Volatile 修飾的變量能夠保證“內存可見性”以及防…

解決連接工具Mobaxterm連接錯誤Connection timed out----VMware里Linux端口號固定

錯誤:Connection timed out 原因: 沒有固定ip,網絡斷開,再次連接就是新的IP 解決: 再次測試連接,彈出這個就代表成功了

CUDA 中的線程組織

明朝那些事中有一句話:我之所以寫徐霞客是想告訴你,所謂千秋霸業萬古流芳,與一件事相比,其實都算不了什么,這件事情就是——用你喜歡的方式度過一生。 我們以最簡單的 CUDA 程序:從 GPU 中輸出 Hello World…

實現一個簡單的哈希映射功能

說在前面 🎈哈希表大家應該都經常用到吧,那么大家有沒有想過哈希表是怎么實現的呢?今天讓我們一起從一道簡單的題目來初步了解一個哈希表的簡單原理。 目的 不使用任何內建的哈希表庫設計一個哈希映射(HashMap)。 實…

bert 相似度任務訓練完整版

任務 之前寫了一個相似度任務的版本:bert 相似度任務訓練簡單版本,faiss 尋找相似 topk-CSDN博客 相似度用的是 0,1,相當于分類任務,現在我們相似度有評分,不再是 0,1 了,分數為 0-5,數字越大…

EasyRecovery易恢復2024免費文件數據恢復軟件下載

一、軟件概述 EasyRecovery易恢復中文文件數據恢復軟件是一款專為中文用戶設計的強大數據恢復工具。該軟件致力于幫助用戶從各種存儲設備中恢復因各種原因丟失的中文文件,如文檔、圖片、視頻、音頻等。憑借其核心技術和多年的研發經驗,EasyRecovery易恢…

C語言計算誤碼率

#include <stdio.h> #include <stdlib.h> bool dayintrue; //是否打印 int main(){ int i,k,g0; int n10,n20; int good0,bad0; double rate; (dayin)? printf("打印具體數據\n"):printf("不打印具體數據\n\n");…

STM32-SPI通信協議

串行外設接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司開發的一種通用數據總線。 在某些芯片上&#xff0c;SPI接口可以配置為支持SPI協議或者支持I2S音頻協議。 SPI接口默認工作在SPI方式&#xff0c;可以通過軟件把功能從SPI模式切換…

Python·算法·每日一題(3月4日)最長公共前綴

題目 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 “”。 示例 示例 1&#xff1a; 輸入&#xff1a;strs ["flower","flow","flight"] 輸出&#xff1a;"fl"示例 2&#xff1a;…

【數據結構與算法】常見排序算法(Sorting Algorithm)

文章目錄 相關概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希爾排序&#xff08;Shell Sort&#xff09;4. 直接選擇排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…

【腦科學相關合集】有關腦影像數據相關介紹的筆記及有關腦網絡的筆記合集

【腦科學相關合集】有關腦影像數據相關介紹的筆記及有關腦網絡的筆記合集 前言腦模板方面相關筆記清單 基于腦網絡的方法方面數據基本方面 前言 這里&#xff0c;我將展開有關我自己關于腦影像數據相關介紹的筆記及有關腦網絡的筆記合集。其中&#xff0c;腦網絡的相關論文主要…

【錯誤處理】【Hive】【Spark】ERROR FileFormatwriter: Aborting job null.

問題背景 近日&#xff0c;使用 Spark 在讀寫 Hive 表時發生了報錯&#xff1a;Aborting job null&#xff0c;如果怎么都使用不了那張表的話&#xff0c;大概率是那張表有臟數據&#xff0c;導致整張表無法正常使用。 ERROR FileFormatwriter: Aborting job null.解決方法 …

SpringBoot 如何快速過濾出一次請求的所有日志?

前言 在現網出現故障時&#xff0c;我們經常需要獲取一次請求流程里的所有日志進行定位。如果請求只在一個線程里處理&#xff0c;則我們可以通過線程ID來過濾日志&#xff0c;但如果請求包含異步線程的處理&#xff0c;那么光靠線程ID就顯得捉襟見肘了。 華為IoT平臺&#x…

《自然》:人工智能在創造性思維方面超越人類

發散性思維被認為是創造性思維的指標。ChatGPT-4 在三項有151名人類參與的**發散思維測試中&#xff0c;**展現出比人類更高水平的創造力&#xff0c;結果顯示人工智能在創意領域持續發展。 發散性思維的特點是能夠針對沒有預期解決方案的問題提出獨特的解決方案&#xff0c;例…

TOMCAT的安裝與基本信息

一、TOMCAT簡介 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試JSP 程序的首選。對于一個初學者來說&#xff0c;可以這樣認為&#xff0c…

IO 與 NIO

優質博文&#xff1a;IT-BLOG-CN 一、阻塞IO / 非阻塞NIO 阻塞IO&#xff1a;當一條線程執行read()或者write()方法時&#xff0c;這條線程會一直阻塞直到讀取到了一些數據或者要寫出去的數據已經全部寫出&#xff0c;在這期間這條線程不能做任何其他的事情。 非阻塞NIO&…

記錄踩過的坑-macOS下使用VS Code

目錄 切換主題 安裝插件 搭建Python開發環境 裝Python插件 配置解釋器 打開項目 打開終端 切換主題 安裝插件 方法1 方法2 搭建Python開發環境 裝Python插件 配置解釋器 假設解釋器已經通過Anaconda建好&#xff0c;只需要在VS Code中關聯。 打開項目 打開終端