精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenCV:對檢測到到目標圖像進行校正

開發
Canny邊緣檢測和霍夫變換是“老派”的計算機視覺技術,但在需要檢測邊緣和簡單模式的應用中仍然非常有用。

在之前的文章《自定義訓練的YOLOv8模型進行郵票整理》中,留下了一大堆郵票圖像,這些圖像是使用Ultralytics自定義訓練的YOLOv8模型自動檢測并保存為單獨的圖像文件的。由于在將郵票放入塑料套時有些馬虎。一些郵票稍微旋轉了一下,導致生成的圖像如下所示。

使用自定義訓練的YOLOv8生成的旋轉郵票圖像

我本可以手動對齊郵票,重新拍攝每一頁的照片并重新運行目標檢測。為了自動校正旋轉偏移,需要以下步驟:

  • 邊緣檢測
  • 直線檢測
  • 仿射變換

1. 邊緣檢測

邊緣檢測是直線檢測的預處理步驟。我決定使用最流行的方法之一——Canny邊緣檢測器(J.F. Canny 1986)。有很多在線資源描述了Canny邊緣檢測的內部工作原理,因此在這里不會過多詳細說明[1,2]。你需要注意兩個閾值設置,因為最佳值可能因圖像而異,并且對邊緣檢測結果有很大影響。

import cv2
import matplotlib.pyplot as plt


# Determine Canny parameters and image path
CANNY_THRESHOLD1 = 0
CANNY_THRESHOLD2 = 200
APERTURE_SIZE = 3
PATH = "/home/username/venv_folder/venv_name/image.jpg"


# Load image and preprocess with gaussian filter
k = 5 # Kernel size
image = cv2.imread(PATH, cv2.IMREAD_GRAYSCALE)
smoothed_image = cv2.GaussianBlur(image, (k, k), 0)


# Detect edges
edges = cv2.Canny(smoothed_image, CANNY_THRESHOLD1, CANNY_THRESHOLD2, apertureSize=APERTURE_SIZE)


# Display results
plt.figure(figsize=(12, 6))


# Plot original image
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.axis('off')


# Plot smoothed image
plt.subplot(1, 3, 2)
plt.imshow(smoothed_image, cmap='gray')
plt.title("Smoothed Image")
plt.axis('off')


# Plot image with edges detected
plt.subplot(1, 3, 3)
plt.imshow(edges, cmap='gray')
plt.title("Canny edges")
plt.axis('off')


plt.tight_layout()
plt.show()

為了獲得更好的結果,應用了帶有平滑處理的Canny邊緣檢測

檢測到邊緣后,我們需要能夠找到至少一條與郵票邊緣平行的直線,以便計算校正所需的角度。幸運的是,郵票通常有一個邊框,可以用于此目的。

2. 直線檢測

對于直線檢測,我們將使用霍夫變換(P. Hough 1962),這是一種通常用于檢測直線、圓和橢圓的特征提取技術[3]。簡而言之,霍夫變換通過將空間域中的幾何形狀轉換為參數空間,從而更容易檢測模式。下圖顯示了從具有單條水平線的圖像計算出的霍夫參數空間的可視化。

單條水平線的霍夫變換(Rho = 半徑,Theta = 角度)。作者使用在線霍夫變換演示生成的圖像[4]

正弦曲線表示可以通過圖像中每個邊緣點的所有可能直線。曲線相交的點表示檢測到的直線。

與Canny邊緣檢測類似,可以使用閾值來調整直線檢測的靈敏度。較高的閾值值僅檢測圖像中較長的連續直線。下面的示例顯示了使用三個閾值值進行霍夫變換的結果,以說明這一點。檢測到的直線通過在原始圖像上繪制它們來可視化(這僅用于說明目的,因為在實踐中,直線檢測應用于邊緣檢測圖像,而不是原始圖像)。

def draw_hough_lines(image, lines):
    # Draw detected Hough lines on image


    line_color = (0,0,255) # Blue
    line_thickness = 2


    output = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)  # Convert image to RGB to display colored lines.
    if lines is not None:
        for line in lines:
            # Calculate line endpoints
            rho, theta = line[0]
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            x1 = int(x0 + 1000 * (-b))
            y1 = int(y0 + 1000 * (a))
            x2 = int(x0 - 1000 * (-b))
            y2 = int(y0 - 1000 * (a))
            cv2.line(output, (x1, y1), (x2, y2), line_color, line_thickness) 
    return output


# Define Hough parameters
rho = 1
theta = np.pi / 180
threshold_values = [80,100,120]
hough_lines = [] # Empty list to store values


# Display results
plt.figure(figsize=(12, 6))


for i in range(len(threshold_values)):
    H = cv2.HoughLines(edges, rho, theta, threshold_values[i])
    hough_lines.append(draw_hough_lines(image, H))


    # Hough lines plot
    plt.subplot(1, len(threshold_values), i+1)
    plt.imshow(hough_lines[i], cmap='gray')
    plt.title(f"Threshold = {threshold_values[i]}")
    plt.axis('off')


plt.tight_layout()
plt.show()

使用霍夫變換檢測到的直線。較高的閾值值可用于僅檢測較長的直線

檢測到直線后,計算它們的角度,以便稍后應用正確的偏移。由于所選閾值值可能不適用于所有圖像,因此任何角度大于20度的直線將被忽略,因為預期的旋轉量應小于此值。角度較大的直線可能不與郵票邊緣平行(如示例圖像中的建筑物屋頂)。由于預期一些直線是水平的,一些是垂直的,因此值被歸一化到[-90, 90]范圍。最后,計算所有檢測到的直線的平均角度,以最小化噪聲的影響。

3. 仿射變換

為了去除圖像中的旋轉,我們將使用仿射變換,它可以校正平移、縮放和剪切效果,同時保留直線和平行性[5]。當相機相對于成像場景的位置不完美或物體遠離相機中心并略微傾斜時,可能會出現這些透視失真。

def straighten_image(image, edges):
    # Detect lines using Hough transform and apply affine transformation to straighten image
    
    # Define Hough parameters
    rho = 1
    theta = np.pi / 180
    threshold = 120 # Minimum number of points in Hough transform to consider as a line
        
    H = cv2.HoughLines(edges, rho, theta, threshold)
    
    # If no lines detected, return original image
    if H is None or len(H) == 0:
        print("No lines detected, image will not be rotated.")
        return image, None  
    
    # Calculate angles of detected lines
    angles = []
    for line in H:
        rho, theta = line[0]
        angle = np.degrees(theta)  # Radians to degrees
        if angle > 90:
            angle -= 180  # Normalize to range [-90, 90]


        # Determine the reference angle and calculate the difference
        if -90 <= angle <= -70:
            diff = angle + 90
        elif -20 <= angle <= 20:
            diff = angle - 0   
        elif 70 <= angle <= 90:
            diff = angle - 90
        else:
            diff = 0  # Ignore angles outside the specified ranges as they are probably not correct line detections
        angles.append(diff)
       
    # Calculate the average of nonzero angles
    nonzero_angles = [angle for angle in angles if angle != 0]
    average_angle = np.mean(nonzero_angles)
    print(f"Average angle offset detected: {average_angle:.1f} degrees")
    
    # Rotate the image to straighten it
    h, w = image.shape[:2]
    center = (w // 2, h // 2)
    rotation_matrix = cv2.getRotationMatrix2D(center, average_angle, 1.0) # make transformation matrix M which will be used for rotating an image.
    straightened_image = cv2.warpAffine(image, rotation_matrix, (w, h), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT, borderValue=(0, 0, 0))
    
    return straightened_image, H


# Load original colour image and apply correction
image_colour = cv2.imread(PATH)
straightened_image, H = straighten_image(image_colour, edges)


# Draw Hough lines on the original image
hough_lines_original = draw_hough_lines(image, H)


# Display results
plt.figure(figsize=(12, 6))


# Original Image
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title("Original image")
plt.axis('off')


# Hough lines
plt.subplot(1, 3, 2)
plt.imshow(hough_lines_original, cmap='gray')
plt.title("Original image with Hough lines")
plt.axis('off')


# Straightened image
plt.subplot(1, 3, 3)
plt.imshow(straightened_image, cmap='gray')
plt.title("Straightened image")
plt.axis('off')


plt.tight_layout()
plt.show()

使用霍夫線和仿射變換自動校正的-1.7度和-3.5度旋轉的圖像

校正后的示例圖像以原始顏色格式顯示,可以直觀地看到沒有或幾乎沒有旋轉。

總結

Canny邊緣檢測和霍夫變換是“老派”的計算機視覺技術,但在需要檢測邊緣和簡單模式的應用中仍然非常有用。在這個例子中,基于檢測到的霍夫線的角度,使用仿射變換應用了旋轉校正。Canny邊緣檢測被用作預處理步驟。為了獲得更自動化的體驗,可以更新代碼以處理指定文件夾中的所有圖像,并在應用校正后保存為新的圖像文件。

參考資料

  • [1] https://en.wikipedia.org/wiki/Canny_edge_detector
  • [2] https://docs.opencv.org/4.x/da/d22/tutorial_py_canny.html
  • [3] https://en.wikipedia.org/wiki/Hough_transform
  • [4] https://www.aber.ac.uk/~dcswww/Dept/Teaching/CourseNotes/current/CS34110/hough.html
  • [5] https://docs.opencv.org/4.x/d4/d61/tutorial_warp_affine.html
責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2024-11-08 15:37:47

2011-08-03 09:45:06

2024-11-27 16:06:12

2024-11-29 16:10:31

2010-03-10 18:29:57

2017-09-22 11:45:10

深度學習OpenCVPython

2024-07-05 10:41:30

目標檢測算法

2023-10-12 09:21:41

Java圖像

2017-09-25 15:43:24

圖像模板Python+Open

2024-01-09 08:20:23

OpenCV二值化灰度化

2024-12-31 12:30:00

OpenCV計算機視覺

2024-08-01 09:00:00

目標檢測端到端

2024-06-05 09:26:50

2022-05-20 15:22:10

惡意軟件僵尸網絡網絡攻擊

2010-02-24 17:01:49

2019-05-16 14:33:35

Windows 10游戲安全違規

2024-12-23 06:30:00

目標檢測圖像分類YOLO

2011-06-02 10:07:28

iostatlinux

2024-01-06 17:07:16

計算機視覺技術

2011-04-29 16:56:47

打印機偏色校正
點贊
收藏

51CTO技術棧公眾號

av电影在线地址| 国产一区二区在线不卡| 亚洲制服欧美另类| 欧亚洲嫩模精品一区三区| 一级做a爰片久久| 亚洲国产999| 媚黑女一区二区| 精品久久久av| 亚洲中文字幕一区| 97成人超碰| 亚洲图片自拍偷拍| 亚洲不卡一卡2卡三卡4卡5卡精品| 又骚又黄的视频| 影音先锋久久精品| 色噜噜狠狠狠综合曰曰曰| jjzz黄色片| 久久夜夜久久| 福利微拍一区二区| 久久久天堂国产精品| 久久天堂电影| 风间由美性色一区二区三区 | 欧美主播一区二区三区| 五月天色婷婷综合| 韩国免费在线视频| 成人手机在线视频| 成人乱人伦精品视频在线观看| 日本少妇全体裸体洗澡| 久久免费av| 日韩精品视频在线| 欧美一级大片免费看| 成人精品动漫| 亚洲二区在线观看| 日本一二三区视频在线| av中文字幕在线| 91丨porny丨国产入口| 99re在线观看| 一本一道人人妻人人妻αv| 久久高清一区| 久久久久久999| 日日骚一区二区三区| 欧美gvvideo网站| 一本大道久久加勒比香蕉| 一出一进一爽一粗一大视频| www.国产精品一区| 欧美成人女星排名| 自拍视频第一页| 日韩在线成人| 日韩一区二区在线免费观看| 中国黄色片一级| 国产精品原创视频| 欧美日韩一区二区欧美激情| 午夜dv内射一区二区| 在线观看爽视频| 色一情一乱一乱一91av| 精品中文字幕av| 亚洲日本天堂| 日韩欧美国产视频| 不卡影院一区二区| 成人福利av| 在线观看免费亚洲| 在线看的黄色网址| 日韩在线你懂得| 91精品国产综合久久精品麻豆| 17c国产在线| 精品一区二区三区中文字幕视频| 日韩一区二区三免费高清| 欧美一级免费在线| 18国产精品| 亚洲精品ady| 一区二区黄色片| 日韩精品一区二区三区免费观影| 中日韩美女免费视频网址在线观看 | 久久综合久久鬼| 伊人久久久大香线蕉综合直播 | 国产xxx精品视频大全| 91精品国产99久久久久久红楼 | 麻豆传媒网站在线观看| 欧美另类tv| 欧美午夜片欧美片在线观看| 亚洲中文字幕久久精品无码喷水| 国产一区二区三区四区五区3d| 欧美日韩成人综合| 精品国产aⅴ一区二区三区东京热| 国产精品色在线网站| 亚洲精品视频免费在线观看| 欧美福利第一页| 欧美精品18| 欧美亚洲国产成人精品| 在线观看亚洲国产| 国产suv精品一区二区6| 欧美不卡福利| 国产在线高清视频| 欧美日韩国产综合新一区| 天堂在线资源视频| 懂色av一区二区| 一本色道久久综合亚洲精品小说 | 91精品久久久久久久久久久久久久| a级片在线免费看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产一区二区三区不卡视频网站| 色偷偷噜噜噜亚洲男人| 久久精品国产亚洲AV无码麻豆 | 国产不卡视频在线| 亚洲视频在线观看免费视频| 成人小视频免费观看| 亚州欧美一区三区三区在线| 黄网av在线| 欧美日韩一区二区三区高清| 日本一卡二卡在线| 国产精品国产一区| 欧美在线xxx| 国产成人精品亚洲精品色欲| 国产欧美日韩亚州综合| 夜夜添无码一区二区三区| 成人mm视频在线观看| 日韩成人在线视频网站| 中文字幕av久久爽av| 日本在线不卡视频一二三区| 国内精品视频免费| 亚洲制服国产| 欧美日韩精品免费| 丰满少妇高潮一区二区| 亚洲黄色精品| 亚洲xxxx在线| 麻豆系列在线观看| 欧美性一级生活| 波多野结衣一本| 亚洲大胆在线| 粉嫩av四季av绯色av第一区| 巨大荫蒂视频欧美另类大| 在线观看不卡一区| 精品人妻一区二区三区日产乱码卜| 欧美1区3d| 成人黄色激情网| 91吃瓜网在线观看| 在线观看免费视频综合| 久久久久久久毛片| 久久免费国产| 欧美日韩免费精品| 在线最新版中文在线| 亚洲国产日韩欧美在线动漫| 国产在线观看免费av| 国产v综合v亚洲欧| 国产玉足脚交久久欧美| 都市激情亚洲| 久久久久久久网站| 国产香蕉在线观看| 精品久久久久久国产| 最新版天堂资源在线| 亚洲一级一区| 国产精品夜夜夜一区二区三区尤| 青春草在线免费视频| 精品久久久久久久久久久久久久久久久 | 亚洲天堂中文字幕在线观看| 欧美成aaa人片在线观看蜜臀| 国产精品久久无码一三区| 亚洲视频在线一区观看| 色偷偷中文字幕| 亚洲福利久久| 久久久久久久久久久一区 | av一本在线| 欧美日韩久久不卡| 欧美色图亚洲视频| 国产成人免费在线观看不卡| 国产自产在线视频| 亚洲婷婷伊人| 国产精品主播视频| 91麻豆一二三四在线| 欧美一级二级在线观看| 日韩熟女精品一区二区三区| 久久综合久色欧美综合狠狠| 国产精品人人爽人人爽| 久久久久久美女精品| 动漫精品视频| 婷婷综合六月| 久久精品视频网站| 亚洲免费一级片| 色哟哟一区二区三区| xxxxx99| 高清免费成人av| 黄www在线观看| 青青草成人影院| 99在线影院| 欧美成人性网| 久久亚洲影音av资源网 | 国产精品777777在线播放| 欧美日韩xxx| 欧美xxx.com| 911精品产国品一二三产区| 日韩女同强女同hd| 国产精品日日摸夜夜摸av| 熟女人妻一区二区三区免费看| 亚洲免费影院| 国产在线无码精品| 九九热线有精品视频99| 91九色蝌蚪成人| 成人性教育av免费网址| 欧美剧在线观看| 国产露出视频在线观看| 欧美一级片在线看| 91久久国产综合久久91| 亚洲综合一二三区| 欧美福利第一页| 99精品国产99久久久久久白柏| 亚洲一级免费在线观看| 国产欧美大片| 日本黄xxxxxxxxx100| 欧美日韩久久精品| 国产欧美日韩视频一区二区三区| 四虎成人精品一区二区免费网站| 91精品国产高清久久久久久| 免费日本一区二区三区视频| 亚洲欧美日本另类| 欧美一级片免费| 制服丝袜中文字幕一区| 欧美一级做a爰片免费视频| 亚洲18色成人| 青娱乐国产盛宴| 亚洲欧洲精品成人久久奇米网| 亚洲区免费视频| 9久草视频在线视频精品| 亚洲热在线视频| 九一九一国产精品| 中文字幕国内自拍| 老司机一区二区三区| 无码 制服 丝袜 国产 另类| 欧美高清不卡| 国产成人精品免费看在线播放 | 成人免费高清在线观看| 国产大片一区二区三区| 蜜臀久久99精品久久久久宅男| 久久精品国产精品亚洲色婷婷| 激情视频一区二区三区| 300部国产真实乱| 51精产品一区一区三区| 亚洲午夜在线观看| 成人在线视频免费观看| 日韩欧美电影一区二区| 国产欧美日韩在线一区二区| 蜜桃视频在线观看91| 丝袜av一区| 美女被啪啪一区二区| 日韩欧美影院| 久久这里精品国产99丫e6| 欧美理伦片在线播放| 久久er99热精品一区二区三区| 久久99国产精品久久99大师| 国产精品久久久久久久免费大片 | 日本午夜精品视频在线观看| 成年人网站大全| 日韩在线卡一卡二| 欧美日韩怡红院| 蜜臀久久99精品久久久久久9 | 精品国产av无码一区二区三区| 欧美色综合网| 免费在线看黄色片| 99精品国产99久久久久久福利| 人妻少妇精品无码专区二区| 国产欧美一级| 日本www.色| 久久国产精品露脸对白| 天堂av.com| av中文字幕亚洲| 欧美多人猛交狂配| 国产精品久久久久影视| 一区二区成人免费视频| 亚洲国产日韩精品| 精品国产一区二区三区四| 在线免费观看日韩欧美| 91精品国自产| 日韩美女视频一区二区在线观看| 黄色一级a毛片| 亚洲美女视频网| 日韩专区在线| 欧美精品激情视频| 国模冰冰炮一区二区| 国产精品视频大全| 日韩国产在线不卡视频| 好吊色欧美一区二区三区视频| 久久99国产精一区二区三区| 亚洲欧洲另类精品久久综合| 国产在线欧美| 亚洲爆乳无码专区| 国产一区二区三区在线观看精品| av av在线| 国产欧美视频一区二区三区| 日韩福利小视频| 亚洲永久免费av| 最新中文字幕在线观看视频| 日韩美女一区二区三区四区| 国产大片在线免费观看| 久久国产精品久久久久久久久久 | 日韩欧美主播在线| 国产免费不卡视频| 日韩高清有码在线| 看黄网站在线| 国产精品都在这里| www.亚洲一二| 中文字幕一区二区三区乱码| 亚洲精品精选| 久久出品必属精品| 久久亚洲二区三区| 久久97人妻无码一区二区三区| 日本久久电影网| 日韩在线视频免费| 精品激情国产视频| 久久久一本精品| 古典武侠综合av第一页| 国产精品久久久久久久免费观看| 日韩欧美一区二| 国产不卡高清在线观看视频| 国产亚洲精品久久久久久豆腐| 五月开心婷婷久久| 午夜久久久久久噜噜噜噜| 中文字幕在线亚洲| 成人香蕉视频| 久久99精品久久久久久水蜜桃| 伊人成综合网| 久久这里只精品| 久久久影视传媒| 日产欧产va高清| 欧美电影免费观看完整版| 91.xxx.高清在线| 国产成人精品电影| 亚洲婷婷影院| 激情综合在线观看| 91丨九色丨尤物| 天海翼一区二区| 亚洲成人a**站| 欧美24videosex性欧美| 91性高湖久久久久久久久_久久99| 欧美日韩国产一区二区三区不卡 | 日韩中文字幕av在线| 国产精品普通话对白| 污污免费在线观看| 亚洲一区二区三区美女| 午夜久久久久久久久久| 欧美高清在线观看| 1204国产成人精品视频| 国产爆乳无码一区二区麻豆| 国产在线一区二区| 日韩av手机在线免费观看| 欧美疯狂做受xxxx富婆| 免费不卡视频| 成人福利视频在线观看| 欧美xxxxx视频| 在线播放av中文字幕| 亚洲色图欧美激情| 国产三级小视频| 久久99精品国产99久久6尤物| 日韩精品一区二区三区中文在线| 免费在线精品视频| 国产一区二区电影| 青青草手机视频在线观看| 欧美成人r级一区二区三区| 久久久123| 国产精品一区二区三区在线观| 亚洲性人人天天夜夜摸| 亚洲精品在线视频免费观看| 黑丝美女久久久| 国产在线91| 成人久久久久久久| 欧美精品日韩| 中文字幕在线播放一区| 欧美午夜激情在线| www.视频在线.com| 国产欧美va欧美va香蕉在| 亚洲女同另类| 国产在线不卡av| 色av成人天堂桃色av| 亚洲s色大片| 91在线看网站| 久久久久久久波多野高潮日日| 欧美熟妇激情一区二区三区| 4438x成人网最大色成网站| 不卡av免费观看| 日韩欧美亚洲v片| 国产乱码精品一区二区三区av| 亚洲国产精品午夜在线观看| 亚洲欧美制服另类日韩| 91精品一区| 欧美日韩在线视频一区二区三区| 亚洲国产高清在线观看视频| 99久久久国产精品无码免费| 国产91精品不卡视频| 欧美顶级大胆免费视频| 无码av免费精品一区二区三区| 色域天天综合网| 欧美性video| 色综合666| 国产超碰在线一区| 欧美高清69hd| 久久久视频在线| 日韩成人激情| 亚洲 欧美 日韩在线| 777a∨成人精品桃花网| 国产免费不卡| 丰满少妇大力进入| 一色屋精品亚洲香蕉网站| 手机看片福利在线观看|