首页 > 解决方案 > cv2.warpPerspective() 返回一个空图像

问题描述

我正在尝试获取图像的 cv2.warpPerspective() 但我什么也没得到。

代码:

from cv2 import cv2
import numpy as np
import operator




src = cv2.imread(r'D:\D_Apps\Sudoku Solver\image\Sodoku.jpg' , cv2.IMREAD_GRAYSCALE)
gaus = cv2.GaussianBlur(src, (9,9),0)
proc = cv2.adaptiveThreshold(gaus, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
proc = cv2.bitwise_not(proc,proc)
kernel = np.array([[0., 1., 0.], [1., 1., 1.], [0., 1., 0.]],np.uint8)
proc = cv2.dilate(proc, kernel)

contours, h = cv2.findContours(src.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=cv2.contourArea, reverse=True)
polygon = contours[0]

bottom_right, _ = max(enumerate([pt[0][0] + pt[0][1] for pt in
 polygon]), key=operator.itemgetter(1))
top_left, _ = min(enumerate([pt[0][0] + pt[0][1] for pt in
 polygon]), key=operator.itemgetter(1))
bottom_left, _ = min(enumerate([pt[0][0] - pt[0][1] for pt in
 polygon]), key=operator.itemgetter(1))
top_right, _ = max(enumerate([pt[0][0] - pt[0][1] for pt in
 polygon]), key=operator.itemgetter(1))

crop_rect = [polygon[top_left][0], polygon[top_right][0], polygon[bottom_right][0], polygon[bottom_left][0]]


top_left, top_right, bottom_right, bottom_left = crop_rect[0], crop_rect[1], crop_rect[2], crop_rect[3]
src = np.array([top_left, top_right, bottom_right, bottom_left], dtype='float32') 
side = max([np.linalg.norm(bottom_right- top_right), np.linalg.norm(top_left- bottom_left),np.linalg.norm(bottom_right- bottom_left), np.linalg.norm(top_left- top_right)])

dst = np.array([[0, 0], [side - 1, 0], [side - 1, side - 1], [0, side - 1]], dtype='float32')
m = cv2.getPerspectiveTransform(src, dst)
cv2.warpPerspective(src, m, (int(side), int(side)))

cv2.imshow('image',src)
cv2.waitKey(0)

此代码返回以下内容:只是一个内部没有图像的窗口。

这只是一扇窗户,里面什么都没有

这是输出有人可以帮我吗?

标签: python-3.xopencvcomputer-visionopencv3.0cv2

解决方案


推荐阅读