精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文字幕一级片| 一级黄色香蕉视频| 精品女同一区二区三区| 欧美一区二区| 欧美mv和日韩mv的网站| 福利视频一区二区三区四区| 亚洲精品国产精品国| 伊人激情综合| 亚洲国产一区二区三区四区| 欧美女人性生活视频| 成人在线观看一区| 国产精品一区专区| 91po在线观看91精品国产性色| 一级特黄a大片免费| 日韩在线影院| 亚洲人成亚洲人成在线观看图片| 97超碰人人看人人| 伊人中文字幕在线观看| 国产精品久久久久久久久妇女| 日韩久久精品一区| 成年人视频观看| 四季av日韩精品一区| 日韩影院精彩在线| 欧美成人在线免费视频| 亚洲成人日韩在线| 粉嫩av国产一区二区三区| 亚洲18女电影在线观看| 欧美日韩一区在线观看视频| 亚洲一区 中文字幕| 99久久99热这里只有精品 | 91精品国产一区二区| 成人免费网站入口| www亚洲人| va亚洲va日韩不卡在线观看| 国产精品美乳一区二区免费 | 一道本在线视频| 亚洲高清在线| 久久色在线播放| 国产精品无码网站| 日本一区二区乱| 在线观看亚洲精品| 日韩亚洲欧美一区二区| 国产露出视频在线观看| 成人综合在线视频| 成人国产精品一区| 天堂网中文字幕| 国产精品videossex久久发布| 国产亚洲激情视频在线| 亚洲一级Av无码毛片久久精品| 欧美男男gaygay1069| 懂色av一区二区三区| 天堂av在线中文| 啊v视频在线| 久久―日本道色综合久久| 91精品综合久久| 亚洲视频久久久| 免播放器亚洲| 91成人精品网站| 久草视频中文在线| 天天射天天综合网| 综合国产在线观看| 99在线视频免费| 美女亚洲一区| 亚洲美女视频网| 国产精品伦子伦| 国产精品自在| 欧美日韩一级黄| 亚洲色图久久久| 91精品影视| 欧美丝袜第一区| 国产成人黄色片| 高清精品在线| 亚洲一区二区三区影院| japanese在线播放| 欧美人与动牲性行为| 亚洲综合色噜噜狠狠| 99视频精品全部免费看| 99在线播放| 国产精品视频麻豆| 午夜精品福利一区二区| 九色网友自拍视频手机在线| 久久久欧美精品sm网站| 日韩av电影免费观看| 激情综合闲人网| 欧美国产丝袜视频| 在线天堂一区av电影| 嫩草在线视频| 一区二区在线观看不卡| 无码人妻精品一区二区蜜桃网站| 中文字幕有码在线观看| 亚洲一区在线电影| 国产原创中文在线观看 | 欧美精品一区二区免费| 好吊色视频在线观看| 久久影院一区| 久久成人亚洲精品| 成人免费看片98| 国产欧美精品久久| 日本精品一区二区三区在线| 国产精品尤物视频| 毛片不卡一区二区| 亚洲a中文字幕| 亚洲免费视频网| 91网址在线看| 一区二区精品国产| 欧美人体视频xxxxx| 午夜精品123| 999精品视频在线| 国产一区二区三区黄网站| 欧美成人vps| 三上悠亚ssⅰn939无码播放| 亚洲va久久| 中文字幕精品一区久久久久| 男人的天堂久久久| av不卡在线看| 成人夜晚看av| 欧美女子与性| 亚洲欧美日韩在线不卡| 免费欧美一级视频| 亚洲最大的免费视频网站| 日韩一区二区三区三四区视频在线观看 | 欧美人交a欧美精品| 免费观看成人毛片| 国产一区二区三区免费看| 精品国产aⅴ麻豆| 国产黄色小视频在线| 精品国产老师黑色丝袜高跟鞋| 国产熟女高潮视频| 日韩一区二区三区高清在线观看| 亚洲视频一区二区| 久久久久久久久久综合| 奇米888四色在线精品| 高清视频一区二区三区| 网友自拍视频在线| 五月天激情综合| 欧美体内she精高潮| 五月激情综合| 国产免费一区二区三区在线观看 | 亚洲 欧美 成人| a亚洲天堂av| 免费高清一区二区三区| 日本成人精品| 免费av一区二区| 一区二区三区亚洲视频| 中文无字幕一区二区三区| 国产第一页视频| 啪啪亚洲精品| 国产精品美女免费看| 激情小视频在线观看| 91黄色免费版| www.日本高清视频| 久久精品二区亚洲w码| 伊人久久大香线蕉成人综合网| 欧美色网在线| 在线看片第一页欧美| 国产乱码77777777| 亚洲国产精品激情在线观看| 啊啊啊国产视频| 日韩精品免费一区二区三区| 国产精品自拍偷拍| 久久精品视频观看| 欧美一区二区三区的| 久久久久久久久久久久久久免费看| 国产91精品久久久久久久网曝门| 激情六月天婷婷| 国内自拍欧美| 日韩av成人在线观看| 77777影视视频在线观看| 91精品国产91久久综合桃花| 欧美成人一二三区| 不卡在线观看av| 欧美性久久久久| 日本久久精品| 91超碰在线免费观看| 欧美xxxx免费虐| 日韩av在线免费观看一区| 国产精品久久久久久久久久久久久久久久久 | 伊人色**天天综合婷婷| 成人av免费看| 在线观看网站免费入口在线观看国内 | 国产精品久久久久久婷婷天堂| 1pondo在线播放免费| 日韩视频一区二区三区| 国产成人无码精品亚洲| 国产区在线观看成人精品 | 国产在线不卡一区二区三区| 欧美大片在线看| 欧美理论在线观看| 在线电影欧美成精品| 国产一级片网址| 国产日韩欧美制服另类| 超碰91在线播放| 在线亚洲激情| 美女在线免费视频| 欧美亚洲国产日韩| 91精品久久久久久综合乱菊| 岛国av在线播放| 久久精品国产视频| 婷婷亚洲一区二区三区| 日韩一区二区在线观看视频| 亚洲综合久久网| 亚洲影视在线观看| 夫妇露脸对白88av| 99久久久久免费精品国产| 国产又大又黄又粗又爽| 亚洲欧洲视频| 中日韩在线视频| 国产欧美日韩免费观看| 岛国视频一区免费观看| 黄色日韩网站| 日本精品视频在线观看| 99热99re6国产在线播放| 日韩中文字幕精品| 日本中文字幕一区二区有码在线| 91精品国产一区二区人妖| 日本黄色中文字幕| 欧美日韩免费网站| 九九热这里有精品视频| 国产精品亲子伦对白| 30一40一50老女人毛片| www.在线成人| 人妻 丝袜美腿 中文字幕| 精品制服美女久久| 免费观看成人网| 午夜在线视频观看日韩17c| 麻豆传媒网站在线观看| 久久亚洲专区| 亚洲啪啪av| 欧美理论在线播放| 欧美一区亚洲二区| 秋霞影视一区二区三区| 国产精品久久一区二区三区| 国产精品视频首页| 国产欧美 在线欧美| 向日葵视频成人app网址| 日本国产欧美一区二区三区| av资源在线| 久久久久久av| 美女日批视频在线观看| 欧美日韩第一视频| 在线观看免费视频你懂的| 久久亚洲国产成人| 国产福利视频在线| 久久伊人91精品综合网站| 免费黄色在线网站| 久久精品久久久久久国产 免费| аⅴ资源新版在线天堂| 国产一区二区三区网站| 成人77777| 色偷偷888欧美精品久久久| jizz在线观看视频| 色综合伊人色综合网站| 一广人看www在线观看免费视频| 在线看欧美日韩| 日本欧美在线视频免费观看| 精品精品国产国产自在线| 秋霞午夜理伦电影在线观看| 久久精品国产69国产精品亚洲 | 免费日韩一区二区三区| 激情五月综合色婷婷一区二区| 国产精品videossex| 国产原创精品| 亚洲影院天堂中文av色| 日本10禁啪啪无遮挡免费一区二区| 免费久久精品| 午夜免费电影一区在线观看| 欧美电影《睫毛膏》| 喜爱夜蒲2在线| 精品91视频| 日本在线视频www| 免费成人在线网站| 亚洲三级在线视频| 91在线观看污| 女教师淫辱の教室蜜臀av软件| 亚洲欧美一区二区久久| 国产一级免费av| 狠狠色狠狠色综合日日小说| 亚洲大尺度在线观看| 91精品欧美综合在线观看最新| 亚洲精品国产一区二| 亚洲欧洲成视频免费观看| 午夜激情视频在线观看| 欧美精品www| 成人啊v在线| 91久久大香伊蕉在人线| 亚洲欧美校园春色| 在线播放 亚洲| 日韩亚洲国产精品| 亚洲欧美在线精品| 成人福利视频网站| 中文字幕第69页| 亚洲成人资源在线| 亚洲一区二区人妻| 日韩精品视频中文在线观看| 日本欧美在线视频免费观看| 97久久精品国产| 亚瑟国产精品| 欧美极品视频一区二区三区| 欧美暴力喷水在线| 成人在线观看黄| 国产成人免费网站| 欧美性猛交xxxx乱大交少妇| 精品久久久久久久久国产字幕| 一区精品在线观看| 日韩经典一区二区三区| 国产精品刘玥久久一区| 日本一本a高清免费不卡| 日韩三级网址| 亚洲精品在线观看免费| 日韩午夜在线| 黄页网站在线看| 国产精品久久久久一区二区三区| www.av麻豆| 日韩欧美成人一区| 麻豆tv入口在线看| 国产精品88a∨| 秋霞蜜臀av久久电影网免费| 国产在线视频在线| 狠狠狠色丁香婷婷综合久久五月| 亚洲精品国产一区黑色丝袜| 午夜在线电影亚洲一区| 精品国产无码AV| 精品国产一区二区在线| 日韩天堂在线| 免费在线成人av| 在线欧美一区| 国产精品熟妇一区二区三区四区| 中文字幕永久在线不卡| 亚洲大尺度在线观看| 亚洲精品日韩在线| 妞干网免费在线视频| 岛国视频一区| 欧美日韩一区二区国产| 国产亚洲色婷婷久久| 亚洲色图欧洲色图| 91九色蝌蚪91por成人| 在线亚洲国产精品网| 日韩在线免费| 亚洲高清视频在线观看| 麻豆精品网站| a毛片毛片av永久免费| 欧美性jizz18性欧美| 亚洲欧美日韩成人在线| 91精品国产色综合| 日韩精品免费一区二区三区竹菊| www.av毛片| av在线一区二区| 久久夜靖品2区| 日韩精品中文字幕在线| 九九色在线视频| 国产精品欧美久久| 亚洲美女91| 亚洲精品成人无码熟妇在线| 91福利在线免费观看| 成人激情电影在线看| 国产综合福利在线| 中文字幕免费一区二区三区| 91香蕉国产线在线观看| 亚洲激情网站免费观看| 狠狠躁日日躁夜夜躁av| 午夜精品久久久久久久99热浪潮| 久久aimee| chinese少妇国语对白| 国产精品国产三级国产a| 国产精品一区二区人人爽| 欧美情侣性视频| 天堂av一区二区三区在线播放| 欧美丰满熟妇bbbbbb百度| 日本一区二区三区视频视频| 中文字幕人妻一区二区三区视频| www亚洲精品| 动漫av一区| 无码日韩人妻精品久久蜜桃| 中文字幕av一区二区三区免费看| 国产又粗又长视频| 久久久久久久久久国产| 免费视频国产一区| www.久久91| 亚洲第一福利一区| 精品影院一区| 亚洲精品日韩av| 国产精品免费看| 日本裸体美女视频| 亚洲精品99999| 久久国内精品| av在线播放天堂| 国产精品久久久爽爽爽麻豆色哟哟| www.午夜激情| 日本老师69xxx| 中文字幕日韩欧美精品高清在线| 黑丝av在线播放| 91精品国产欧美一区二区18| 大桥未久在线视频| 在线丝袜欧美日韩制服| 91亚洲精品一区二区乱码| 怡春院在线视频| 992tv成人免费视频| 91欧美国产| 一卡二卡三卡四卡| 日韩欧美你懂的|