请问这种图片怎么根据书籍的中间分割成两张图片?
我尝试用opencv中的HoughLines方法根据直线查找,但是始终找不到中间的线
示例代码
package com.yxd.facesb;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.net.URL;
import static org.opencv.highgui.HighGui.imshow;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;
import static org.opencv.imgproc.Imgproc.COLOR_RGB2GRAY;
import static org.opencv.imgproc.Imgproc.cvtColor;
public class OpenCv {
public static void main(String[] args) throws Exception {
System.setProperty("java.awt.headless", "false");
System.out.println(System.getProperty("java.library.path"));
// 加载动态库
URL url = new URL("file:\\D:\\opencv\\opencv\\build\\java\\x64\\opencv_java455.dll");
System.load(url.getPath());
Mat canny2 = new Mat();
Mat canny3 = new Mat();
Mat canny4 = new Mat();
Mat canny5 = new Mat();
// 读取图像
Mat srcImage = imread("e:\\aa.jpg");
Mat dstImage = srcImage.clone();
Imgproc.Canny(srcImage, dstImage, 50, 200, 3, false);
Imgcodecs.imwrite("F:\\dst3.jpg", dstImage);
Imgproc.dilate(dstImage,canny4,canny3,new Point(),2);
Imgcodecs.imwrite("F:\\canny4.jpg", canny4);
Imgproc.erode(canny4, canny5, canny3);
Imgcodecs.imwrite("F:\\dst5.jpg", canny5);
Imgproc.watershed(srcImage,canny5);
Mat storage = new Mat();
Imgproc.HoughLines(canny5, storage, 1, Math.PI / 180, 500, 0, 0, 0, 10);
for (int x = 0; x < storage.rows(); x++)
{
double[] vec = storage.get(x, 0);
double rho = vec[0];
double theta = vec[1];
Point pt1 = new Point();
Point pt2 = new Point();
double a = Math.cos(theta);
double b = Math.sin(theta);
double x0 = a * rho;
double y0 = b * rho;
pt1.x = Math.round(x0 + 1000 * (-b));
pt1.y = Math.round(y0 + 1000 * (a));
pt2.x = Math.round(x0 - 1000 * (-b));
pt2.y = Math.round(y0 - 1000 * (a));
if (theta >= 0)
{
Imgproc.line(srcImage, pt1, pt2, new Scalar(255, 255, 255, 255), 1, Imgproc.LINE_4, 0);
}
}
Imgcodecs.imwrite("F:\\dst2.jpg", srcImage);
}
}
我想 应该先用 边缘检测(EDGE DETECTION),把轮廓勾勒出来,然后再处理一下可能就实现了。