[英]How to get edge coordinates of scanned image with opencv?
我有一張圖像,是掃描像這樣的硬拷貝文件的結果:
如您所見,有一個空格,每個角上還有四個矩形。
我需要找到矩形的每個邊緣的坐標,以便可以對其進行裁剪。
我使用opencv,如何用opencv做到這一點?
如何使用opencv獲取掃描圖像的邊緣坐標?
如果我有該坐標,則可以使用從互聯網獲得的這段代碼進行裁剪:
# USAGE
# python transform_example.py --image images/example_01.png --coords "[(73, 239), (356, 117), (475, 265), (187, 443)]"
# python transform_example.py --image images/example_02.png --coords "[(101, 185), (393, 151), (479, 323), (187, 441)]"
# python transform_example.py --image images/example_03.png --coords "[(63, 242), (291, 110), (361, 252), (78, 386)]"
# import the necessary packages
from pyimagesearch.transform import four_point_transform
import numpy as np
import argparse
import cv2
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help = "path to the image file")
ap.add_argument("-c", "--coords",
help = "comma seperated list of source points")
args = vars(ap.parse_args())
# load the image and grab the source coordinates (i.e. the list of
# of (x, y) points)
# NOTE: using the 'eval' function is bad form, but for this example
# let's just roll with it -- in future posts I'll show you how to
# automatically determine the coordinates without pre-supplying them
image = cv2.imread(args["image"])
pts = np.array(eval(args["coords"]), dtype = "float32")
# apply the four point tranform to obtain a "birds eye view" of
# the image
warped = four_point_transform(image, pts)
# show the original and warped images
cv2.imshow("Original", image)
cv2.imshow("Warped", warped)
cv2.waitKey(0)
使用此代碼,您可以根據需要直接裁剪圖像。
import cv2
import numpy as np
new_image = cv2.imread('test.jpg', 0)
rows, cols = new_image.shape
vertical_histrogram = np.zeros(cols)
horizontal_histrogram = np.zeros(rows)
for col in range(cols): # create vertical histrogram for each lines
for row in range(rows):
if new_image[row, col] == 0:
vertical_histrogram[col] += 1
for row in range(rows): # create horizontal histrogram for each lines
for col in range(cols):
if new_image[row, col] == 0:
horizontal_histrogram[row] += 1
for row in range(rows - 1, -1, -1):
if horizontal_histrogram[row] > 0:
top = row;
break
for row in range(0, rows):
if horizontal_histrogram[row] > 0:
bottom = row;
break
for col in range(0, cols):
if vertical_histrogram[col] > 0:
left = col;
break
for col in range(cols - 1, -1, -1):
if vertical_histrogram[col] > 0:
right = col;
break
new_image = new_image[bottom :top , left :right ]
cv2.imwrite('output.jpg', new_image)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.