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

圖解 cv2.HoughLines & cv2.line 參數(shù)原理

這篇具有很好參考價值的文章主要介紹了圖解 cv2.HoughLines & cv2.line 參數(shù)原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

功能實現(xiàn):利用cv.HoughLines尋找圖像中霍夫直線,然后用cv2.line繪制紅色的直線。

拓展:計算整幅圖像的平均灰度值,以及經(jīng)過篩選的霍夫直線的平均灰度值,并進行比較。

目錄

一、效果圖以及參數(shù)講解?

二、圖解霍夫直線的返回參數(shù)

三、源碼(包含注釋)

四、拓展


一、效果圖以及參數(shù)講解?

圖解 cv2.HoughLines & cv2.line 參數(shù)原理?圖1 原圖

圖解 cv2.HoughLines & cv2.line 參數(shù)原理

?圖2 邊緣處理后的圖像

圖解 cv2.HoughLines & cv2.line 參數(shù)原理

圖3 繪制紅色霍夫直線的圖像?

lines = cv2.HoughLines(image_edge, 1, np.pi/180, 180)

  • image_edge:經(jīng)過圖像邊緣處理后的圖像
  • 1:像素之間的距離為1
  • np.pi/180:直線角度范圍,2pi/(pi/180) = 360°
  • 180:一條預(yù)選直線上的最少像素點個數(shù)

注意:

如果距離是1,180個像素即可生成直線,如果距離是2,至少360個像素才可以生成直線。

cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 1)?

  • img:在圖像img上繪制直線
  • (x1, y2)、(x2, y2):直線的兩個端點,直接相連便可得到所需直線
  • (0, 0, 255):紅色
  • 1:設(shè)置直線的寬度為1

注意:

直線的兩個端點可以是負數(shù)。

二、圖解霍夫直線的返回參數(shù)

cv2.HoughLines?的返回參數(shù)?line ==??,其中,第一個參數(shù)表示圖像原點距離直線的長度,第二個參數(shù)表示沿著x軸的角度大小。

如下圖所示,首先通過 cv.HoughLines 得到 line ,此時已經(jīng)確定了直線的位置,然后需要確定直線上的兩個坐標點來充當 cv.line 的輸入?yún)?shù),最后,在源圖像上通過 cv.line 來繪制紅色直線。

圖解 cv2.HoughLines & cv2.line 參數(shù)原理

?圖4 圖解cv2.HoughLines的返回參數(shù)

        # 延長直線的長度,保證在整幅圖像上繪制直線
        x1 = int(x0 + 2000 * (-b))
        y1 = int(y0 + 2000 * (a))
        x2 = int(x0 - 2000 * (-b))
        y2 = int(y0 - 2000 * (a))

前面講到, 霍夫直線值僅僅返回兩個參數(shù),并不會直接返回直線上的坐標點,我們在選取直線坐標點的時候,需要盡量選取圖像外部的點(即負數(shù)),這樣才會過整幅圖像繪制直線。

三、源碼(包含注釋)

import cv2
import numpy as np
from numpy import mean


# 讀取圖像以及圖像的寬和高
img = cv2.imread('./img.png')
h = img.shape[0]
w = img.shape[1]

# 求取圖像的平均灰度值
img_gray = cv2.cvtColor(img, cv2.COLOR_RGBA2GRAY)
all_gray = []
for i in range(h):
    for j in range(w):
        all_gray.append(img_gray[i, j])
print('圖像的平均灰度值:', mean(all_gray))

# Canny算子尋找圖像的邊緣
image_edge = cv2.Canny(img, 200, 200)

# 尋找霍夫直線
lines = cv2.HoughLines(image_edge, 1, np.pi/180, 180)

# 繪畫霍夫直線
if lines is not None:
    for n, line in enumerate(lines):
        # 沿著左上角的原點,作目標直線的垂線得到長度和角度
        rho = line[0][0]
        theta = line[0][1]
        # if np.pi / 3 < theta < np.pi * (3 / 4):
        a = np.cos(theta)
        b = np.sin(theta)
        # 得到目標直線上的點
        x0 = a * rho
        y0 = b * rho

        # 延長直線的長度,保證在整幅圖像上繪制直線
        x1 = int(x0 + 2000 * (-b))
        y1 = int(y0 + 2000 * (a))
        x2 = int(x0 - 2000 * (-b))
        y2 = int(y0 - 2000 * (a))

        # 連接兩點畫直線
        # print((x1, y1), (x2, y2))  # (-148, 993) (335, -947)
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 1)

        # ===============================CAB================================ #
        xDis = x2 - x1  # x的增量
        yDis = y2 - y1  # y的增量
        if (abs(xDis) > abs(yDis)):
            maxstep = abs(xDis)
        else:
            maxstep = abs(yDis)
        xUnitstep = xDis / maxstep  # x每步驟增量
        yUnitstep = yDis / maxstep  # y的每步增量
        x = x1
        y = y1
        average_gray = []
        for k in range(maxstep):
            x = x + xUnitstep
            y = y + yUnitstep
            # print("x: %d, y:%d" % (x, y))
            if 0 < x < h and 0 < y < w:
                # print(img_gray[int(x), int(y)])
                average_gray.append(img[int(x), int(y)])
        print('第{}霍夫直線的平均灰度值:'.format(n), mean(average_gray))  # 平均115,陰影的邊界在125以上,堵料的邊界在105左右
        # ================================================================== #

    print('直線的數(shù)量:', len(lines))
else:
    print('直線的數(shù)量:', 0)

# 可視化圖像
cv2.imshow('0', img)
cv2.imshow('1', image_edge)
cv2.waitKey(0)

四、拓展

因項目的需求,需要比對霍夫直線和整幅圖像的平均灰度值的大小關(guān)系,所以在上面的源碼中,我把此項功能加入到其中,希望對你有所幫助。


>>> 如有疑問,歡迎評論區(qū)一起探討。文章來源地址http://www.zghlxwxcb.cn/news/detail-405980.html

到了這里,關(guān)于圖解 cv2.HoughLines & cv2.line 參數(shù)原理的文章就介紹完了。如果您還想了解更多內(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)文章

  • cv2.line使用報錯【已解決】error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function ‘line‘ > Overload

    cv2.line使用報錯【已解決】error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function ‘line‘ > Overload

    cv2.line: image = cv2.line(image, 直線起點坐標, 直線終點坐標, 顏色, 粗細) 使用cv2.line時,報告了如下錯誤 error提示索引為1的參數(shù)類型錯誤,即(weigh, right_y), (0, left_y) 通過打印發(fā)現(xiàn)weigh、right_y、left_y數(shù)據(jù)類型為float 將數(shù)據(jù)類型修改為int后不在報錯

    2024年02月11日
    瀏覽(24)
  • cv2.drawContours的參數(shù)

    cv2.drawContours() 函數(shù)有以下參數(shù): image:輸入圖像,一般是二值圖像或彩色圖像; contours:要繪制的輪廓,是一個 Python 列表,每個列表元素都是一個 Numpy 數(shù)組,代表一個輪廓; contourIdx:要繪制的輪廓的索引,默認為 -1,代表繪制所有輪廓; color:輪廓的顏色,是一個三元組

    2024年02月14日
    瀏覽(21)
  • cv2.videocapture.read()參數(shù)

    cv2.videocapture.read()是OpenCV庫中讀取視頻文件的函數(shù),其參數(shù)為一個可選的參數(shù),用于指定讀取視頻文件時的參數(shù)。該參數(shù)是一個整數(shù)類型的值,可以為以下值之一: 0: 默認參數(shù),表示從第一個可用的攝像頭中讀取視頻流。 1: 表示從第二個可用的攝像頭中讀取視頻流。 字符串

    2024年02月16日
    瀏覽(26)
  • 復(fù)現(xiàn)路上的花開花落(2)cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function ‘line‘

    復(fù)現(xiàn)complex yolo 運行檢測程序報錯 原因:類型出錯 解決辦法: 第一種:將報錯語句中所有能改類型的值全加上int強制轉(zhuǎn)成整型 第二句更正為: 第二種:opencv-python版本過高導(dǎo)致,降低版本 參考別的博主,從4.6.0降下來,親測該版本可行 參考鏈接: 無法解析“pt1”。索引為

    2024年02月16日
    瀏覽(22)
  • 在python中,cv2.calibrateCamera包含哪些輸入?yún)?shù)和輸出參數(shù)

    在 Python 中, cv2.calibrateCamera 函數(shù)是用于相機標定的函數(shù)。以下是該函數(shù)的主要參數(shù)和返回值: retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2.calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags, criteria) ? 輸入?yún)?shù): objectPoints : 一個包含每個棋盤格圖像的物理

    2024年03月24日
    瀏覽(25)
  • opencv 進階10-人臉識別原理說明及示例-cv2.CascadeClassifier.detectMultiScale()

    opencv 進階10-人臉識別原理說明及示例-cv2.CascadeClassifier.detectMultiScale()

    人臉識別是指程序?qū)斎氲娜四槇D像進行判斷,并識別出其對應(yīng)的人的過程。人臉識別程 序像我們?nèi)祟愐粯?,“看到”一張人臉后就能夠分辨出這個人是家人、朋友還是明星。 當然,要實現(xiàn)人臉識別,首先要判斷當前圖像內(nèi)是否出現(xiàn)了人臉,也即人臉檢測。只有檢 測到圖像

    2024年02月09日
    瀏覽(91)
  • 【OpenCV】仿射變換中cv2.estimateAffine2D 的原理

    【OpenCV】仿射變換中cv2.estimateAffine2D 的原理

    目錄 一、介紹 二、仿射變換矩陣 (M) 1.M中六個元素的說明 2.計算旋轉(zhuǎn)角度 3.M的計算過程 三、輸出狀態(tài) (inliers) 四、錯切參數(shù) 1.錯切參數(shù)的定義 2.錯切參數(shù)例子 (1)水平錯切 (2)垂直錯切 ????????cv2.estimateAffine2D?是 OpenCV 庫中的一個函數(shù),用于估計兩個二維點集之間的

    2024年02月04日
    瀏覽(56)
  • 第一篇【傳奇開心果短博文系列】Python的庫OpenCV技術(shù)點案例示例:cv2常用功能和方法

    第一篇【傳奇開心果短博文系列】Python的庫OpenCV技術(shù)點案例示例:cv2常用功能和方法

    cv2是Python中常用的第三方庫,也稱為OpenCV庫,用于圖像處理和計算機視覺任務(wù)。它提供了許多功能和方法,可以讀取、處理和顯示圖像,以及執(zhí)行各種圖像處理操作。 以下是cv2庫的一些常用功能和方法的介紹: 讀取和顯示圖像: 保存圖像: 轉(zhuǎn)換圖像顏色空間: 裁剪和調(diào)整

    2024年01月23日
    瀏覽(52)
  • cv2.approxPolyDP函數(shù)實現(xiàn)輪廓線的多邊形逼近

    cv2.approxPolyDP函數(shù)實現(xiàn)輪廓線的多邊形逼近

    ????????實際項目需要擬合輪廓線,提取更貼合目標的四個點,于是找到了cv2.approxPolyDP函數(shù)。cv2.approxPolyDP() 使用了Douglas-Peucker算法,算法原理如下: 輸入一組曲線點集合S,輸出折線點集合T流程: ????????step1、設(shè)閾值thresh,取A的起點A和終點B加入T; ????????st

    2023年04月13日
    瀏覽(93)
  • opencv視頻截取每一幀并保存為圖片python代碼CV2實現(xiàn)練習

    當涉及到視頻處理時,Python中的OpenCV庫提供了強大的功能,可以方便地從視頻中截取每一幀并將其保存為圖片。這是一個很有趣的練習,可以讓你更深入地了解圖像處理和多媒體操作。 使用OpenCV庫,你可以輕松地讀取視頻文件,并在循環(huán)中逐幀讀取視頻的每一幀。隨后,你可

    2024年02月12日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包