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

OpenCV使用基礎(chǔ)、技巧

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

OpenCV概述與安裝

視覺概述

人類的視覺能夠很輕易地從圖像中識別出內(nèi)容。但是,計算機視覺不會像人類視覺那樣能夠?qū)D像進行感知和識別,更不會自動控制焦距和光圈,而是把圖像解析為按照柵格狀排列的數(shù)字。

這些按照柵格狀排列的數(shù)字包含大量的噪聲,噪聲在圖像上常表現(xiàn)為引起較強視覺效果的孤立像素點或像素塊,使得圖像模糊不清。因此,噪聲是計算機視覺面臨的一個難題。要想讓圖片變得清晰,就需要對抗噪聲。

計算機視覺使用統(tǒng)計的方法對抗噪聲,例如,計算機視覺雖然很難通過某個像素或者這個像素的相鄰像素判斷這個像素是否在圖像主體的邊緣上,但是如果對圖像某一區(qū)域內(nèi)的像素做統(tǒng)計,那么上述判斷就變得簡單了,即在指定區(qū)域內(nèi),圖像主體的邊緣應(yīng)該表現(xiàn)為一連串獨立的像素,而且這一連串像素的方向應(yīng)該是一致的。

OpenCV常用模塊
模塊 介紹
Core 包函OpenCV庫的基礎(chǔ)結(jié)構(gòu)以及基本操作
Improc 包函基本的圖像轉(zhuǎn)換,包括濾波、卷積
Highgui 輕量級的UI工具包
Video 讀寫視頻流的方法
Calib3d 校準單個、雙目以及多個相機的算法實現(xiàn)
Feature2d 檢測、描述、匹配特征點算法
Objecttect 檢測待定目標的算法
ML 包含大量機器學(xué)習(xí)算法
Flann 多維空間的聚類和搜索
GPU 包含在CUDA GPU上優(yōu)化實現(xiàn)的方法
Photo 計算機攝影學(xué)的一些方法
Stitching 圖像拼接流程的實現(xiàn)
dnn 深度神經(jīng)網(wǎng)絡(luò)模塊
安裝

安裝Python這里我使用的是Anaconda

  1. 創(chuàng)建虛擬環(huán)境

    conda create --name 環(huán)境名稱 python=3.8

  2. 進入環(huán)境

    activate 環(huán)境名稱

    OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

  3. 修改源

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

  4. 查看源如下圖既可

    conda config --show channels

    OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

  5. 安裝需要的依賴

    pip install numpy pandas matplotlib opencv-python

  6. 查看是否安裝成功

    pip list

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

  1. 測試一下是否安裝成功

    準備一張圖片 這里我命名為image.jpg

    import cv2
    image = cv2.imread("image.jpg")
    print(image)
    

    輸出類似如下:

    OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

OpenCV基礎(chǔ)-圖像數(shù)字化

讀取圖像:

# 獲取彩色圖像
image = cv2.imread("image.jpg")
方法 作用
image.shape (垂直像素,水平像素,通道數(shù))
image.size 圖像包含的像素個數(shù)
image.dtype 數(shù)據(jù)類型

獲取某一像素的RGB值:

print(image[231, 128])
# B通道
print(image[231, 128, 0])
# G通道
print(image[231, 128, 1])
# R通道
print(image[231, 128, 2])

輸出:

[59 72 46]
59
72
46

即坐標[231, 128]上的像素的RGB值由[59 72 46]組成

拆分通道:

image = cv2.imread("image.jpg")
cv2.imshow("image", image)
b, g, r = cv2.split(image)
cv2.imshow("B", b) # 顯示B通道圖像
cv2.imshow("G", g) # 顯示G通道圖像
cv2.imshow("R", r) # 顯示R通道圖像

合并通道:

image = cv2.imread("image.jpg")
b, g, r = cv2.split(image)
rgb = cv2.merge([r, g, b]) # 按R→G→B順序合并
cv2.imshow("RGB", rgb)

創(chuàng)建純黑色的圖像:

width = 800
height = 600
img = np.zeros((height, width), np.uint8)
cv2.imshow("img", img)

拼接圖像:

image1 = cv2.imread("image1.jpg")
image2 = cv2.imread("image2.jpg")
# 水平拼接兩個圖像
img_h = np.hstack((image1, image2))
# 垂直拼接兩個圖像
img_v = np.vstack((image1, image2))
cv2.imshow("img_h", img_h)
cv2.imshow("img_v", img_v)

使用OpenCV繪制圖形

繪制黃色的線:

# 繪制一個黑色的背景畫布
canvas = np.zeros((300, 300, 3), np.uint8)
# 在畫布上,繪制一條起點坐標為(150, 50)、終點坐標為(150, 250),黃色的,線條寬度為20的線段
canvas = cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

繪制矩形:

# 在畫布上繪制一個左上角坐標為(65,65),右下角坐標為(180,150),青色的,線條寬度為20的矩形邊框
canvas = cv2.rectangle(canvas, (65, 65), (200, 150), (255, 255, 0), 20)

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

繪制圓形:

# 在畫布上,繪制一個圓心坐標為(150, 50),半徑為40,黃色的實心圓形
canvas = cv2.circle(canvas, (150, 50), 40, (0, 255, 255), -1)

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

繪制多邊形:

# 根據(jù)坐標[100, 50], [200, 50], [250, 250], [50, 250],繪制一個閉合的,紅色的,線條寬度為5的等腰梯形邊框
canvas = cv2.polylines(canvas, [np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)], True, (0, 0, 255), 5)

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

繪制文字:

# 字體大小為2,線條顏色是綠色,線條寬度為5
cv2.putText(canvas, "Hello World", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)

OpenCV使用基礎(chǔ)、技巧,opencv,人工智能,計算機視覺,python

OpenCV圖像變換

圖像縮放:

img = cv2.imread("image.png")
# 寬100像素、高100像素的大小進行縮放
dst = cv2.resize(img, (100, 100))

按比例縮放:

# 將寬縮小到原來的1/3、高縮小到原來的1/2
dst = cv2.resize(img, None, fx=1 / 3, fy=1 / 2)
# 將寬高擴大2倍
dst = cv2.resize(img, None, fx=2, fy=2)

圖像翻轉(zhuǎn):

沿X軸翻轉(zhuǎn):

dst1 = cv2.flip(img, 0)

沿Y軸翻轉(zhuǎn):

dst2 = cv2.flip(img, 1) 

同時沿X軸、Y軸翻轉(zhuǎn):

dst3 = cv2.flip(img, -1)

圖像旋轉(zhuǎn):

# 圖像像素行數(shù)
rows = len(img)
# 圖像像素列數(shù)
cols = len(img[0])
# 圖像的中心點
center = (rows / 2, cols / 2)
# 以圖像為中心,逆時針旋轉(zhuǎn)30度,縮放0.8倍
M = cv2.getRotationMatrix2D(center, 30, 0.8)
dst = cv2.warpAffine(img, M, (cols, rows))

OpenCv圖形檢測

繪制圖像輪廓:

img = cv2.imread("image.png")
# 彩色圖像轉(zhuǎn)為變成單通道灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 灰度圖像轉(zhuǎn)為二值圖像
t, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 檢測圖像中出現(xiàn)的所有輪廓,記錄輪廓的每一個點
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
# 繪制所有輪廓,寬度為5,顏色為紅色
cv2.drawContours(img, contours, -1, (0, 0, 255), 5)

為輪廓添加矩形框:

# 獲取第一個輪廓的最小矩形邊框,記錄坐標和寬高
x, y, w, h = cv2.boundingRect(contours[0])
# 繪制紅色矩形
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)

為輪廓添加圓形框:

contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# 獲取最小圓形邊框的圓心點和半徑
center, radius = cv2.minEnclosingCircle(contours[0])
# 圓心點橫坐標轉(zhuǎn)為近似整數(shù)
x = int(round(center[0]))
# 圓心點縱坐標轉(zhuǎn)為近似整數(shù)
y = int(round(center[1]))
cv2.circle(img, (x, y), int(radius), (0, 0, 255), 2)

Canny邊緣檢測:

img = cv2.imread("image.png")
r1 = cv2.Canny(img, 10, 50)

直線檢測:

img = cv2.imread("image.jpg")
# 復(fù)制原圖
o = img.copy()
# 使用中值濾波進行降噪
o = cv2.medianBlur(o, 5)
gray = cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)
binary = cv2.Canny(o, 50, 150)  # 繪制邊緣圖像
# 檢測直線,精度為1,全角度,閾值為15,線段最短100,最小間隔為18
lines = cv2.HoughLinesP(binary, 1, np.pi / 180, 15, minLineLength=100, maxLineGap=18)
for line in lines:  # 遍歷所有直線
    x1, y1, x2, y2 = line[0]  # 讀取直線兩個端點的坐標
    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)  # 在原始圖像上繪制直線

圓環(huán)檢測:

img = cv2.imread("image.jpg")
o = img.copy()
o = cv2.medianBlur(o, 5)
gray = cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)  # 從彩色圖像變成單通道灰度圖像
# 檢測圓環(huán),圓心最小間距為70,Canny最大閾值為100,投票數(shù)超過25。最小半徑為10,最大半徑為50
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 70, param1=100, param2=25, minRadius=10, maxRadius=50)
circles = np.uint(np.around(circles))  # 將數(shù)組元素四舍五入成整數(shù)
for c in circles[0]:  # 遍歷圓環(huán)結(jié)果
    x, y, r = c  # 圓心橫坐標、縱坐標和圓半徑
    # 繪制圓環(huán)
    cv2.circle(img, (x, y), r, (0, 0, 255), 3)
    # 繪制圓心
    cv2.circle(img, (x, y), 2, (0, 0, 255), 3)

OpenCV處理視頻

開啟攝像頭:

import cv2
# 打開筆記本內(nèi)置攝像頭
capture = cv2.VideoCapture(0)
while (capture.isOpened()):
    # 從攝像頭中實時讀取視頻
    retval, image = capture.read()
    # 在窗口中顯示讀取到的視頻
    cv2.imshow("Video", image)
    # 窗口的圖像刷新時間為1毫秒
    key = cv2.waitKey(1)
    # 按下空格就終止
    if key == 32:
        break
capture.release()
cv2.destroyAllWindows()

彩色視頻轉(zhuǎn)換為灰度視頻:

import cv2
capture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while (capture.isOpened()):
    retval, image = capture.read()
    # 把彩色視頻轉(zhuǎn)換為灰度視頻
    image_Gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    if retval == True: 
        cv2.imshow("Video", image)
        cv2.imshow("Video_Gray", image_Gray) 
    key = cv2.waitKey(1)
    if key == 32: 
        break
capture.release() 
cv2.destroyAllWindows()

保存視頻圖像:

import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while (cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow("Video", frame) 
    k = cv2.waitKey(1)
    if k == 32:
        cap.release() 
        cv2.destroyWindow("Video")
        cv2.imwrite("路徑", frame) # 保存按下空格鍵時攝像頭視頻中的圖像
        cv2.waitKey() # 刷新圖像
        break
cv2.destroyAllWindows() # 銷毀顯示圖像的窗口

播放視頻文件:

import cv2
video = cv2.VideoCapture("視頻路徑")
while (video.isOpened()):
    retval, image = video.read()
    # 設(shè)置“Video”窗口的寬為800,高為600
    cv2.namedWindow("Video", 0)
    cv2.resizeWindow("Video", 800, 600)
    if retval == True:
        # 在窗口中顯示讀取到的視頻文件
        cv2.imshow("Video", image)
    else:
        break
    key = cv2.waitKey(1)
    # 按下ESC退出
    if key == 27: 
        break
video.release()
cv2.destroyAllWindows()

視頻文件轉(zhuǎn)換為灰度的:文章來源地址http://www.zghlxwxcb.cn/news/detail-836442.html

import cv2
video = cv2.VideoCapture("視頻路徑")
while (video.isOpened()): 
    retval, img_Color = video.read()
    cv2.namedWindow("Gray", 0)
    cv2.resizeWindow("Gray", 800, 600)
    if retval == True: 
        img_Gray = cv2.cvtColor(img_Color, cv2.COLOR_BGR2GRAY)
        cv2.imshow("Gray", img_Gray)
    else: 
        break
    key = cv2.waitKey(1) 
    if key == 27: 
        break
video.release()
cv2.destroyAllWindows()

到了這里,關(guān)于OpenCV使用基礎(chǔ)、技巧的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【人工智能的數(shù)學(xué)基礎(chǔ)】使用Mitchell近似構(gòu)造加法神經(jīng)網(wǎng)絡(luò)

    使用Mitchell近似構(gòu)造加法神經(jīng)網(wǎng)絡(luò). paper:Deep Neural Network Training without Multiplications arXiv:link 本文通過 Mitchell 近似算法將乘法運算轉(zhuǎn)變?yōu)榧臃ㄟ\算,從而降低了神經(jīng)網(wǎng)絡(luò)中的乘法的運算量。 Mitchell 近似是一種在二進制下近似的 快速對數(shù) 和 指數(shù) 計算方法。對于一個十進制的非

    2024年02月07日
    瀏覽(27)
  • 玩轉(zhuǎn)AIGC(人工智能生成內(nèi)容)需要一些小技巧

    玩轉(zhuǎn)AIGC(人工智能生成內(nèi)容)需要一些小技巧

    玩轉(zhuǎn)AIGC(人工智能生成內(nèi)容)的確需要一些技巧,而Prompt提示詞的選擇非常關(guān)鍵,可以影響到生成的答案。以下是一些與AI對話的技巧和咒語示例: 確保你的Prompt清晰明了,包括主題、問題或指令,以便AI能夠更好地理解你的需求。 有點像小學(xué)語文,老師會要求你用一句話描

    2024年02月05日
    瀏覽(40)
  • 人工智能基礎(chǔ)_機器學(xué)習(xí)015_BGD批量梯度下降代碼演示_在批量梯度下降中使用逆時衰減---人工智能工作筆記0055

    人工智能基礎(chǔ)_機器學(xué)習(xí)015_BGD批量梯度下降代碼演示_在批量梯度下降中使用逆時衰減---人工智能工作筆記0055

    然后我們用代碼來演示一下BGD批量梯度下降,首先啟動jupyter notebook 然后我們新建一個文件 新建文件夾,然后新建一個python文件 然后我們這里用一元一次方程進行批量梯度下降. import numpy as np 導(dǎo)入數(shù)學(xué)計算包 X = np.random.rand(100,1)? `np.random.rand(100, 1)` 是NumPy庫中的一個函數(shù),用于

    2024年02月05日
    瀏覽(35)
  • 人工智能基礎(chǔ)部分24-人工智能的數(shù)學(xué)基礎(chǔ),匯集了人工智能數(shù)學(xué)知識最全面的概況

    人工智能基礎(chǔ)部分24-人工智能的數(shù)學(xué)基礎(chǔ),匯集了人工智能數(shù)學(xué)知識最全面的概況

    、 大家好,我是微學(xué)AI,今天給大家介紹一下人工智能基礎(chǔ)部分24-人工智能的數(shù)學(xué)基礎(chǔ),匯集了人工智能數(shù)學(xué)知識最全面的概況,深度學(xué)習(xí)是一種利用多層神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)進行特征學(xué)習(xí)和表示學(xué)習(xí)的機器學(xué)習(xí)方法。要全面了解深度學(xué)習(xí)的數(shù)學(xué)基礎(chǔ),需要掌握這些數(shù)學(xué)知識:向

    2024年02月21日
    瀏覽(102)
  • 人工智能基礎(chǔ)_機器學(xué)習(xí)003_有監(jiān)督機器學(xué)習(xí)_sklearn中線性方程和正規(guī)方程的計算_使用sklearn解算八元一次方程---人工智能工作筆記0042

    人工智能基礎(chǔ)_機器學(xué)習(xí)003_有監(jiān)督機器學(xué)習(xí)_sklearn中線性方程和正規(guī)方程的計算_使用sklearn解算八元一次方程---人工智能工作筆記0042

    然后我們再來看看,如何使用sklearn,來進行正規(guī)方程的運算,當然這里 首先要安裝sklearn,這里如何安裝sklearn就不說了,自己查一下 首先我們還是來計算前面的八元一次方程的解,但是這次我們不用np.linalg.solve這個 解線性方程的方式,也不用 直接 解正規(guī)方程的方式: 也就是上面這種

    2024年02月08日
    瀏覽(29)
  • 【實用技巧】掌握人工智能語音轉(zhuǎn)換的核心技術(shù),輕松實現(xiàn)多語言語音轉(zhuǎn)換和語音合成

    作者:禪與計算機程序設(shè)計藝術(shù) 【實用技巧】掌握人工智能語音轉(zhuǎn)換的核心技術(shù),輕松實現(xiàn)多語言語音轉(zhuǎn)換和語音合成 1.1. 背景介紹 隨著全球化的加速,跨文化交流需求日益增長,多語言語音轉(zhuǎn)換和語音合成技術(shù)應(yīng)運而生。人工智能技術(shù)的發(fā)展為語音合成和轉(zhuǎn)換提供了便利

    2024年02月08日
    瀏覽(381)
  • 【人工智能】AGI 通用人工智能基礎(chǔ)概念、實現(xiàn)原理、挑戰(zhàn)和發(fā)展前景

    【人工智能】AGI 通用人工智能基礎(chǔ)概念、實現(xiàn)原理、挑戰(zhàn)和發(fā)展前景

    Artificial intelligence prompt completion by dalle mini, https://github.com/borisdayma/dalle-mini 隨著計算機技術(shù)、機器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)等技術(shù)的發(fā)展,人工智能(Artificial Intelligence, AI)已經(jīng)成為當今計算機科學(xué)和工程領(lǐng)域的熱門話題之一。 強人工智能(Strong AI)或通用人工智能(英語:Artificia

    2024年02月09日
    瀏覽(112)
  • 人工智能基礎(chǔ)學(xué)習(xí)

    人類的一大優(yōu)勢是沒有一種智能。 有些人可以輕松學(xué)習(xí)新語言,而另一些人則精通科學(xué)和技術(shù)。 然而,許多偉大的藝術(shù)家都是糟糕的數(shù)學(xué)家。 另一方面,許多偉大的數(shù)學(xué)家都是糟糕的藝術(shù)家。 但每個人都可以以自己的方式變得聰明。 人類智能沒有一個標準。 這使得你很難

    2024年02月12日
    瀏覽(23)
  • 學(xué)習(xí)人工智能-基礎(chǔ)篇

    學(xué)習(xí)人工智能-基礎(chǔ)篇

    背景 隨著大模型的火爆,人工智能再次被推到高潮,其實它在眾多行業(yè)領(lǐng)域已經(jīng)落地很多應(yīng)用,并給社會帶來了巨大的經(jīng)濟價值。其中包括互聯(lián)網(wǎng)、教育、金融、醫(yī)療、交通、物流等等。在測試領(lǐng)域也有一些落地的案例,作為測試人員,有必要去了解并學(xué)習(xí)人工智能,去挖掘

    2024年02月04日
    瀏覽(15)
  • 人工智能基礎(chǔ)篇

    人工智能基礎(chǔ)篇

    本篇目錄: 一、人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系 (1)、關(guān)系圖 (2)、人工智能 (3)、人類智能過程 (4)、機器學(xué)習(xí) (5)、深度學(xué)習(xí) 二、人工智能研究的領(lǐng)域 三、人工智能的應(yīng)用場景 (1)、計算機視覺 (2)、語音技術(shù) (3)、自然語言處理 (4)、決策系統(tǒng)

    2024年02月09日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包