首先抛出一个问题,给定一系列二维平面上的的点,这些点是可以组成一个封闭的二维图形。因为这些点是矩形区域拍摄图像后识别得到的图形的边界点,所以我们要抽象出来这个矩形,也就是我们要反映出这个矩形。问题是在拍照的时候摄像头可能不是正对着图形的,那么矩形就必然在图像上反映为一个四边形, 如下图所示。那怎么得到这个四边形的四个顶点呢?使用经典图像处理的算法的话可以使用OpenCV提供了几个和矩形相关的函数接口。另一类就是使用机器学习类算法检测定位四个角点。这篇文章我们主要来看看使用经典图像处理算法来解决这个问题。
1.最小包络正矩形
Rect boundingRect(InputArray points)
函数会给我们传入的边界点计算得到一个最小的包络正矩形,并输出这个正矩形的顶点。
import cv2
from matplotlib import pyplot as plt
import numpy as np
image = cv2.imread("0.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findConto