java - 将缓冲图像转换为 Mat 后圆检测失败

标签 java opencv javacv hough-transform

我是opencv新手,使用opencv3。我正在尝试使用hough-transform检测圆。我有this code,它从文件读取图像并检测圆,然后将其写入文件.这工作正常。这里是原始的 image ,这里是 detected

但是我想检测缓冲图像中的圆圈。所以我使用了一种方法将缓冲图像转换为Mat对象。然后发生的情况是圆圈检测失败并且图像已调整大小。亮度也降低了太多。这是failed one .

这是我用来将缓冲图像转换为 mat 的代码(取自 stackoverflow 答案)

public Mat bufferedImageToMat(BufferedImage bi) {
    byte[] pixels = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData();
    Mat mat = new Mat(bi.getWidth(), bi.getHeight(), CvType.CV_8UC3);
    mat.put(0, 0, pixels);
    return mat;
}

我认为问题出在上面的方法上。 这是代码行 4748

Mat source = Imgcodecs.imread(circleimage, Imgcodecs.CV_LOAD_IMAGE_COLOR);
//Mat source = bufferedImageToMat(bi);

如果我使用第一个(直接从图像读取)代码可以工作。但是如果我使用第二个圆圈检测失败。

你能看出这个方法有问题吗?谢谢

最佳答案

在 OpenCV 中,图像由矩阵表示,其构造函数在之前使用数,因此您应该使用

Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CvType.CV_8UC3);

我试图在 OpenCV Point(x,y) represent (column,row) or (row,column) 中解释原因如果您想了解更多信息。

关于java - 将缓冲图像转换为 Mat 后圆检测失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35362602/

相关文章:

opencv - 编译 PCL 以与 OpenCV 一起使用

python - 如何解释 matchtemplate 输出? (开放式计算机,Python)

java - 在 Javacv 中传递 Point2f [] 作为 getAffineTransform() 的参数

java - 如何在 Java 中跨线程传递事件?

java - java中两个矩阵相加

java - 如何从文件的特定行读取

java - 如何从 applet 中获知 Java applet 正在哪个 Web 浏览器下运行?

python - opencv 和多处理

android - 使用 javacv 像在 vine 中一样点击进行记录

animation - 如何为视频中的图像制作动画