为了账号安全,请及时绑定邮箱和手机立即绑定

将变换矩阵应用于 OpenCV 中的 warpTransform

将变换矩阵应用于 OpenCV 中的 warpTransform

尚方宝剑之说 2021-09-28 13:23:31
因此,我想转换图像,但无法真正找到使用 OpenCV 进行转换的正确方法。我有图像的第一件事就是说 500x600px 里面有一个扭曲的东西,我想“拉直”看图像:我正在像这样获得数独的轮廓:cropped_image, contours, _ = cv2.findContours(cropped_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)max_contour = max(contours, key=cv2.contourArea)然后我得到max_contour和图像极端像素(左上角、右上角、右下角和左下角)并获取变换矩阵并像这样变换图像:x, y = cropped_image.shapeimage_extreme_pixels = np.array([[0, y], [x, y], [x, 0], [0, 0]], dtype=np.float32)c_x, c_y = [], []for i in contour:  c_x.append(i[0][0])  c_y.append(i[0][1])contour_extreme_pixels = np.array([  [min(c_x), max(c_y)],  [max(c_x), max(c_y)],  [max(c_x), min(c_y)],  [min(c_x), min(c_y)]],  dtype=np.float32)t_matrix = cv2.getPerspectiveTransform(contour_extreme_pixels, image_extreme_pixels)transformed_image = cv2.warpPerspective(cropped_image, t_matrix, (y, x))plt.imshow(cropped_image, interpolation='nearest', cmap=plt.cm.gray)但是当我查看图像时,它以一种奇怪的方式发生了变化。我想拉伸数独的顶部,使其轮廓笔直。你能指出我的代码有什么问题吗?我假设这可能是我创建 4 个极端像素的方式,然后将这些像素放入getPerspectiveTransform以获得转换矩阵,但尚未设法使其工作。
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

假设您已经准确地找到了数独的角点,您可以将输入图像仿射变换为:


# Hard coded the points here assuming that you already have 4 corners of sudoku image

sudoku_corner_points = np.float32([[235, 40], [1022, 55], [190, 875], [1090, 880]])

canvas = np.ones((500, 500), dtype=np.uint8)

dst_points = np.float32([[0, 0], [500, 0], [0, 500], [500, 500]])


t_matrix = cv2.getPerspectiveTransform(sudoku_corner_points, dst_points)


transformed_image = cv2.warpPerspective(img, t_matrix, (500, 500))

查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信