国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python OpenCV 牛刀小試(練習)

這篇具有很好參考價值的文章主要介紹了Python OpenCV 牛刀小試(練習)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

BGR與RGB

? ? ? ? OpenCV在讀取圖像時,默認的顏色空間是BGR(藍綠紅),而在大多數其他的圖像處理庫和圖像格式中,使用的顏色空間是RGB(紅綠藍)。因此,當你需要使用OpenCV處理圖像,然后將處理結果傳遞給其他庫(如matplotlib、PIL等)進行進一步處理或顯示時,你需要將顏色空間從BGR轉換為RGB。

? ? ? ? 例如,如果你想使用matplotlib來顯示一個由OpenCV處理過的圖像,你需要先將顏色空間從BGR轉換為RGB,否則圖像的顏色會顯示錯誤。

import cv2
from matplotlib import pyplot as plt

# 使用OpenCV讀取圖像
image = cv2.imread('image.jpg')

# 使用OpenCV處理圖像(例如,進行邊緣檢測、特征提取等)

# 將顏色空間從BGR轉換為RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 使用matplotlib顯示圖像
plt.imshow(image)
plt.show()

? ? ? ? 在這個例子中,如果不進行顏色空間的轉換,那么matplotlib顯示的圖像顏色會與原圖不同,因為matplotlib默認的顏色空間是RGB,而OpenCV的是BGR。

Canny邊緣檢測

? ? ? ? 邊緣檢測有很多種方法,包括Sobel、Scharr、Laplacian、Prewitt和Canny等

? ? ? ? Canny邊緣檢測的特點:

  1. 效果好:Canny邊緣檢測是一種非常流行的邊緣檢測方法,它能夠很好地檢測出圖像的邊緣,而且邊緣連續(xù),幾乎沒有斷裂。

  2. 噪聲抑制:Canny邊緣檢測在進行邊緣檢測之前,會先使用高斯濾波器對圖像進行平滑處理,以消除圖像中的噪聲。這使得Canny邊緣檢測對噪聲的抵抗能力比其他邊緣檢測方法更強。

  3. 雙閾值檢測:Canny邊緣檢測使用了雙閾值檢測來確定邊緣,這可以有效地消除了因噪聲或其他因素造成的虛假邊緣。

  4. 易于使用:Canny邊緣檢測在OpenCV中的實現非常簡單,只需要一行代碼就可以完成。

? ? ? ? 這種方法因為其效果好、抗噪聲能力強、易于使用等優(yōu)點,所以被廣泛應用于圖像處理中的邊緣檢測任務。

基礎用法

  1. gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

    ? ? ? ? 這行代碼將圖像從顏色空間轉換為灰度空間。在灰度空間中,圖像的每個像素只有一個強度值,而不是顏色空間中的三個。這樣可以簡化后續(xù)的邊緣檢測操作,因為我們只需要處理一個通道的數據。

  2. edges = cv2.Canny(gray, threshold1=30, threshold2=100)

    ? ? ? ? 這行代碼使用Canny邊緣檢測算法找出圖像中的邊緣。Canny算法是一種非常流行的邊緣檢測算法,它使用兩個閾值(在這里是30和100)來檢測強度變化較大的區(qū)域,這些區(qū)域通常對應于物體的邊緣。

  3. contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    ? ? ? ? 這行代碼使用findContours函數找出圖像中的輪廓。輪廓可以被視為連接所有連續(xù)邊緣的曲線。在這里,cv2.RETR_EXTERNAL表示只檢測外輪廓,cv2.CHAIN_APPROX_SIMPLE表示對輪廓點進行壓縮,例如,對于一條直線輪廓,只需要存儲該直線的起始點和結束點。

    ? ? ? ? findContours函數返回兩個值:第一個是一個列表,其中每個元素都是一個輪廓(輪廓本身也是一個列表,包含輪廓上的點);第二個是輪廓的層次信息,但在這里我們不需要它,所以用_忽略了。

? ? ? ? 總的來說,這三行代碼的目的是將圖像轉換為灰度,然后使用Canny算法找出邊緣,最后找出邊緣形成的輪廓。

Canny的閾值如何調節(jié)

? ? ? ? 在Canny邊緣檢測算法中,30和100是兩個閾值,它們用于確定邊緣。這兩個閾值定義了邊緣檢測的強度:

  • threshold1:最小值閾值。低于此閾值的邊緣會被忽略。
  • threshold2:最大值閾值。高于此閾值的邊緣會被認為是真正的邊緣。

? ? ? ? 這兩個閾值之間的邊緣則根據其連通性來決定。如果這些邊緣與某個“確定邊緣”(即強度超過threshold2的邊緣)相連,則它們被認為是邊緣的一部分,否則它們會被丟棄。

? ? ? ? 改變這兩個值會影響邊緣檢測的結果:

  • 如果你降低threshold1或提高threshold2,將會檢測到更少的邊緣,因為只有強度更高的邊緣才會被檢測到。
  • 如果你提高threshold1或降低threshold2,將會檢測到更多的邊緣,因為強度較低的邊緣也會被檢測到。

? ? ? ? 選擇合適的閾值是很重要的,因為它會直接影響到邊緣檢測的效果。通常,threshold2的值應該是threshold1的值的2到3倍。

在所有輪廓中找出最大輪廓

contour = sorted(contours, key=cv2.contourArea, reverse=True)[0]

? ? ? ? contours是一個列表,其中每個元素都是一個輪廓。輪廓本身是一個由點組成的列表,這些點定義了輪廓的形狀。

? ? ? ? sorted函數用于對列表進行排序。在這里,它對contours列表進行排序。

? ? ? ? key=cv2.contourArea參數指定了排序的依據。cv2.contourArea是一個函數,它計算一個輪廓的面積。所以,這里的排序依據是輪廓的面積。

? ? ? ? reverse=True參數指定了排序的方向。如果reverse=True,那么列表會按照降序排序,也就是說,面積最大的輪廓會排在最前面。

? ? ? ? [0]是一個索引操作,它取出排序后的列表中的第一個元素。因為我們按照面積進行了降序排序,所以第一個元素就是面積最大的輪廓。

? ? ? ? 所以,這行代碼的意思是:按照面積對所有檢測到的輪廓進行降序排序,然后取出面積最大的一個。文章來源地址http://www.zghlxwxcb.cn/news/detail-831320.html

到了這里,關于Python OpenCV 牛刀小試(練習)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 工欲善其事必先利其器--CMake牛刀小試

    這里假設用戶已經安裝好MinGW編譯套件!并配置好環(huán)境變量!具體怎么下載和配置網上教程非常多,這里貼上一個鏈接:不僅教你安裝MinGW還教你安裝VScode配置 1、學習c plus plus編碼為什么要學習CMake? 在Windows下使用集成開發(fā)環(huán)境(IDE)開發(fā)項目時,一般會使用IDE自帶的構建工

    2024年02月06日
    瀏覽(21)
  • 爬蟲之牛刀小試(十):爬取某寶手機商品的銷量,價格和店鋪

    爬蟲之牛刀小試(十):爬取某寶手機商品的銷量,價格和店鋪

    首先淘寶需要登錄,這一點如果用selenium如何解決,只能手動登錄?如果不用selenium,用cookies登錄也可。但是驗證碼又是一個問題,現在的驗證碼五花八門,難以處理。 我們回到正題,假設你已經登錄上淘寶了,接著我們需要找到輸入框和搜索按鈕,輸入“手機”,點擊搜索

    2024年04月10日
    瀏覽(21)
  • 網頁學習-小試牛刀

    網頁學習-小試牛刀

    分為三大部分: HTML 、 CSS 和 JavaScript 。 HTML(Hyper Text Markup Language,即超文本標記語言),網頁骨架。 CSS(Cascading Style Sheets,層疊樣式表),使頁面變得美觀、優(yōu)雅,網頁皮膚。 JavaScript(簡稱JS,是一種腳本語言),實現實時、動態(tài)、交互的頁面功能,網頁肌肉。 學習目的

    2023年04月22日
    瀏覽(46)
  • Mapreduce小試牛刀(1)

    Mapreduce小試牛刀(1)

    1.與hdfs一樣,mapreduce基于hadoop框架,所以我們首先要啟動hadoop服務器 --------------------------------------------------------------------------------------------------------------------------------- 2.修改hadoop-env.sh位置JAVA_HOME配置,在JAVA_HOME前面加上export,重啟主虛擬機,最好也把另外兩個節(jié)點同位置的

    2024年02月04日
    瀏覽(23)
  • 運維Shell腳本小試牛刀(二)

    運維Shell腳本小試牛刀(二)

    運維Shell腳本小試牛刀(一) 運維Shell腳本小試牛刀(二) 運維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解 [root@www shelldic]# cat checkpass.sh? #!/bin/bash - #================================================================================================================== # # # ? ? ? ? ? ? ? ? ? ? ? ? ?

    2024年02月10日
    瀏覽(28)
  • 快速上手kettle(二)小試牛刀

    快速上手kettle(二)小試牛刀

    目錄 一 、前言 二 、兩個小目標 三、 kettle核心概念介紹 3.1 轉換 3.1.1 步驟(Step) 3.1.2 跳(Hop) 3.1.3 元素據 3.1.4 數據類型 3.1.5 并發(fā)執(zhí)行 3.2 作業(yè) 四、實踐操作 4.1 案例1 將csv文件轉換成excel文件 4.1.1 在kettle中新建一個轉換 4.1.2選擇輸入控件并設置 4.1.3 選擇輸出控件并設置 4.

    2024年02月06日
    瀏覽(25)
  • 運維Shell腳本小試牛刀(一)

    運維Shell腳本小試牛刀(一)

    運維Shell腳本小試牛刀(一) 運維Shell腳本小試牛刀(二) 運維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解 運維Shell腳本小試牛刀(四): 多層嵌套if...elif...elif....else fi_蝸牛楊哥的博客-CSDN博客 Cenos7安裝小火車程序動畫 運維Shell腳本小試牛刀(五):until循環(huán) 運維Shell腳本小試牛刀

    2024年02月11日
    瀏覽(26)
  • 【LED子系統(tǒng)】八、小試牛刀

    個人主頁:董哥聊技術 我是董哥,高級嵌入式軟件開發(fā)工程師,從事嵌入式Linux驅動開發(fā)和系統(tǒng)開發(fā),曾就職于世界500強公司! 創(chuàng)作理念:專注分享高質量嵌入式文章,讓大家讀有所得!

    2024年02月06日
    瀏覽(22)
  • 手動開發(fā)-實現SpringMVC底層機制--小試牛刀

    手動開發(fā)-實現SpringMVC底層機制--小試牛刀

    在這里說的底層機制的實現主要是指:前端控制器、Controller、Service注入容器、對象自動裝配、控制器方法獲取參數、視圖解析、返回json數據。 前端控制器就是核心控制器。在這里我們可以設計一個Servlet來充當核心控制器: LingDispatcherServlet.java .這個控制器的作用主要是接收

    2024年02月08日
    瀏覽(19)
  • 小試牛刀 -- Kali Linux安裝在手機

    小試牛刀 -- Kali Linux安裝在手機

    ? ? ?Kali Linux是基于Debian的Linux的發(fā)行版,里面有許多關于網絡滲透的程序,是目前在網絡安全領域經常使用的工具,因此為了便于學習,在此進行Kali Linux的安裝,主要安裝在華為P50上,操作系統(tǒng)是鴻蒙4.0。 ? ?2.1 Termux的安裝及配置 ? ? ? ?(1)Termux的安裝 ? ? ? ?在安裝Te

    2024年01月23日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包