我刚刚在2周前学习OpenCV并计划在我的Spring项目中使用java包装器。我希望根据其形状裁剪图像并将其嵌入纯白色背景中。我已经尝试过几种来自互联网的方法(HSV平均比较,使用标准ROI进行裁剪,屏蔽等)并决定使用我从一些论坛得到的这些步骤:
我希望有人可以帮我解决这个问题,或者指导使用其他方法,非常感谢。
示例图像源: Image Source
当前使用Rectangle ROI提取的结果(以下部分中未包含代码,因为我正在尝试更改方法):Cropped Image
这是我尝试过的(使用OpenCV 3.2.0):
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// Reading the Image from the file and storing it in to a Matrix object
String file ="C:/EXAMPLES/OpenCV/smartphone.jpg";
Mat src = Imgcodecs.imread(file);
Mat srcClone = new Mat(); // clone it so it won't affect the original image
Imgproc.cvtColor(src, srcClone, Imgproc.COLOR_BGR2GRAY); // convert the color to gray
Double threshold = Imgproc.threshold(srcClone, srcClone, 50, 255, Imgproc.THRESH_BINARY);
// add gaussian blur effect to reduce noises
Imgproc.GaussianBlur(srcClone, srcClone, new Size(5,5), 0);
//find the edges using Canny
Mat edges = new Mat();
Imgproc.Canny(srcClone, edges, 100, 200);
//find the Contour based on Canny result
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
final Mat hierarchy = new Mat();
Imgproc.findContours(edges, contours, hierarchy, Imgproc.RETR_EXTERNAL , Imgproc.CHAIN_APPROX_SIMPLE);
//don't know the next step if not using Rectangle ROI
...