目錄
前言
一、設(shè)計(jì)思路
二、編程步驟
三、代碼實(shí)現(xiàn)
四、測(cè)試結(jié)果
總結(jié)
前言
????????本實(shí)驗(yàn)旨在利用OpenCV庫(kù)實(shí)現(xiàn)對(duì)傾斜圖片的校正,并通過(guò)鼠標(biāo)交互方式選擇圖片的邊界點(diǎn),以便進(jìn)行透視變換和圖像裁剪,代碼簡(jiǎn)潔,適合初學(xué)者參考學(xué)習(xí)。
一、設(shè)計(jì)思路
????????首先,我們需要讀取一張傾斜的圖片,并將其顯示在屏幕上。然后,我們使用鼠標(biāo)交互的方式選擇圖片的邊界點(diǎn),以便計(jì)算透視變換矩陣。在獲取足夠數(shù)量的邊界點(diǎn)坐標(biāo)后,我們可以使用OpenCV的cv2.getPerspectiveTransform()函數(shù)計(jì)算透視變換矩陣,并使用cv2.warpPerspective()函數(shù)將原始圖片應(yīng)用透視變換矩陣,得到校正后的圖像。最后,根據(jù)校正后的圖像中的實(shí)際內(nèi)容,我們可以選擇對(duì)圖像進(jìn)行裁剪,以去除不需要的部分。
二、編程步驟
- ????????(1)導(dǎo)入所需的庫(kù)。在Python中,你可以使用OpenCV庫(kù)來(lái)進(jìn)行圖像處理和透視變換。因
- 此,首先需要導(dǎo)入OpenCV庫(kù)。
- ????????(2)讀取傾斜的圖片。使用OpenCV的cv2.imread()函數(shù)讀取圖片,并將其存儲(chǔ)為一個(gè)圖像對(duì)象。
- ????? (3)顯示圖片并等待鼠標(biāo)事件。使用OpenCV的cv2.imshow()函數(shù)顯示圖片,并使用cv2.setMouseCallback()函數(shù)設(shè)置鼠標(biāo)回調(diào)函數(shù),以便在鼠標(biāo)點(diǎn)擊事件發(fā)生時(shí)獲取邊界點(diǎn)的坐標(biāo)。
- ???????? (4)獲取邊界點(diǎn)坐標(biāo)。在鼠標(biāo)點(diǎn)擊事件發(fā)生時(shí),回調(diào)函數(shù)會(huì)被觸發(fā),可以通過(guò)回調(diào)函數(shù)中提供的參數(shù)來(lái)獲取鼠標(biāo)點(diǎn)擊的坐標(biāo)。在這個(gè)步驟中,你可以使用一個(gè)列表來(lái)存儲(chǔ)每個(gè)邊界點(diǎn)的坐標(biāo)。????????
- ????????(5)計(jì)算透視變換矩陣。在獲取足夠數(shù)量的邊界點(diǎn)坐標(biāo)后,使用OpenCV的cv2.getPerspectiveTransform()函數(shù)計(jì)算透視變換矩陣。這個(gè)函數(shù)接受源點(diǎn)和目標(biāo)點(diǎn)的坐標(biāo),并返回一個(gè)3x3的變換矩陣。
- ????????(6)應(yīng)用透視變換矩陣。使用OpenCV的cv2.warpPerspective()函數(shù)將原始圖片應(yīng)用透視變換矩陣,得到校正后的圖像。這個(gè)函數(shù)接受原始圖片、透視變換矩陣和輸出圖像的大小作為參數(shù),并返回一個(gè)轉(zhuǎn)換后的圖像。
- ????????(7)裁剪校正后的圖像。根據(jù)校正后的圖像中的實(shí)際內(nèi)容,你可以選擇對(duì)圖像進(jìn)行裁剪,以去除不需要的部分。可以使用OpenCV的圖像切片操作來(lái)實(shí)現(xiàn)裁剪。
- ????????(8)顯示和保存校正后的圖像。使用OpenCV的cv2.imshow()函數(shù)顯示校正后的圖像,并使用cv2.imwrite()函數(shù)將校正后的圖像保存到本地文件中。
-
三、代碼實(shí)現(xiàn)
-
import cv2 import numpy as np #讀取圖像 img = cv2.imread('D:/Users/Desktop/python/mmexport1603882179174.jpg') cv2.imshow('Original Image', img) points = [] #定義鼠標(biāo)回調(diào)函數(shù) def mouse_click(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: points.append([x, y]) cv2.circle(img, (x, y), 5, (0, 255, 0), -1) #綁定鼠標(biāo)回調(diào)函數(shù) cv2.namedWindow('Original Image') cv2.setMouseCallback('Original Image', mouse_click) #循環(huán)檢測(cè)按鍵 while True: cv2.imshow('Original Image', img) if cv2.waitKey(1) & 0xFF == ord('q'): break #判斷邊界點(diǎn)數(shù)量是否為4 if len(points) != 4: print('Please select exactly 4 points.') exit() src_points = np.float32(points) dst_points = np.float32([[0, 0], [500, 0], [500, 500], [0, 500]]) #進(jìn)行透視變換 M = cv2.getPerspectiveTransform(src_points, dst_points) warped_img = cv2.warpPerspective(img, M, (500, 500)) cv2.imshow('Warped Image', warped_img) cv2.waitKey(0) # 繼續(xù)顯示原始圖像 cv2.imshow('Original Image', img) cv2.waitKey(0) cv2.destroyAllWindows()
-
四、測(cè)試結(jié)果
-
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-831939.html
總結(jié)
????????本文使用Python和OpenCV庫(kù)實(shí)現(xiàn)對(duì)傾斜圖片的校正,并通過(guò)鼠標(biāo)交互方式選擇圖片的邊界點(diǎn),以便進(jìn)行透視變換和圖像裁剪。最終可以得到一張校正后的圖片,其中包含了原始圖片中需要保留的內(nèi)容,同時(shí)去除了不需要的部分,提高了圖片的質(zhì)量和可用性,歡迎討論交流。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-831939.html
到了這里,關(guān)于Python+OpenCV庫(kù)實(shí)現(xiàn)對(duì)傾斜圖片的校正的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!