将缓冲图像转换为Mat

时间:2016-02-12 12:24:01

标签: java opencv javacv hough-transform

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

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

这里是我用来将缓冲图像转换为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);

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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