需求:
找到图片中的标记框,后期可以基于此实现确定纸张方向等功能。
思路:可以借鉴二维码的三点定位原理,进行实现。
巨人的肩膀:
效果:
代码运行后效果:
各个阶段的截图如图所示,右下角的三张图片(标记0-2)是能够定位出来的三个标记框
原图:
canny处理效果(找轮廓):
依赖:
需要OpenCV的运行环境,Windows直接通过exe安装即可,Mac有些繁琐,Linux需要通过源码进行本地编译。具体参见其他资料,此处不再赘述。
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
源码:
import com.stonelu.tools.opencv.OpencvUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.opencv.core.*;
import org.opencv.imgproc.Imgproc;
import java.awt.*;
import java.awt.Point;
import java.util.*;
import java.util.List;
/**
* @author stonelu
* @date 2019-06-11 09:39
*/
public class Test {
public static void main(String[] args) {
findQRCode();
}
private static void showImg(Mat mat, String title, int idx) {
ImageForm.showImage(mat, new Dimension(400, 400), title, new Point(50 * idx, 50 * idx));
}
private static void findQRCode() {
// 测试图片
String srcFilePath = "/Users/edz/Desktop/corner-3.jpg";
int imIdx = 0;
// 子轮廓个数
int tarChildContourCnt = 4;
List<MatOfPoint