最近工作需求:用opencv来先做一个demo。扫描照片进行边缘检测和透视矫正。
之后会加入照片降噪等处理。
请教了一下搞图像的同事。他的提议:
1、绿盟的“黄色照片检测” 用的是动态的opencv库。apk反编译出来有显示,导致技术人员对这个的应用评价变差。
2、opencv 用在这两个功能上,属于大材小用。用c语言写一两个函数,java层把照片传到c层。速度很快就可以完成。
3、opencv 只是提供一个框架,具体的功能实现,还是要自己写。功能很少的情况下,没有想象的那么好用和简便。
4、推荐了两本书
Android OpenCV应用程序设计/(Joseph Howse)著,赵雷 译
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Canny函数。线条太多
采用Java层的findContours函数做尝试
public static void findContours(Mat image, java.util.List<MatOfPoint> contours, Mat hierarchy, int mode, int method)
public static void findContours(Mat image, java.util.List<MatOfPoint> contours, Mat hierarchy, int mode, int method, Point offset)
其中的参数
mode
提取模式.
CV_RETR_EXTERNAL - 只提取最外层的轮廓 (这个就真的只有外层轮廓,数组数据个数为1)
CV_RETR_LIST - 提取所有轮廓,并且放置在 list 中
CV_RETR_CCOMP - 提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界。 (这个会将图片的方形边框连起来)
CV_RETR_TREE - 提取所有轮廓,并且重构嵌套轮廓的全部 hierarchy