JavaCV中Mat对象调用get()与dump()方法未定义问题求助
问题:JavaCV中Mat的get()和dump()方法未定义
我需要对比输出结果,因此想查看通过读取图像创建的Mat对象内容。尝试了几种方法,但文档和相关文章里提到的函数却显示未定义。我使用的是JavaCV而非OpenCV,但这些函数仍无法调用。
代码示例
import org.bytedeco.opencv.opencv_imgproc.*; import static org.bytedeco.opencv.global.opencv_core.*; import org.bytedeco.opencv.opencv_core.Size; import org.bytedeco.opencv.opencv_imgproc.Vec2fVector; import org.bytedeco.opencv.opencv_core.*; import static org.bytedeco.opencv.global.opencv_imgproc.*; import static org.bytedeco.opencv.global.opencv_imgcodecs.*; import static org.bytedeco.opencv.global.opencv_core.CV_PI; import static org.bytedeco.opencv.global.opencv_imgproc.HoughLines; import org.opencv.imgproc.Imgproc; public class ImagePreProcessor { org.bytedeco.opencv.opencv_core.Mat image; ImagePreProcessor(String path) { this.image = new org.bytedeco.opencv.opencv_core.Mat(); org.bytedeco.opencv.opencv_core.Mat image = imread(path, IMREAD_GRAYSCALE); org.bytedeco.opencv.opencv_core.Size sz = new org.bytedeco.opencv.opencv_core.Size(500, 500); // The following two lines **are not working** image.get(2,3); image.dump(); // apparently these functions are not defined even though the documentation says that they're defined } }
解决方案
- JavaCV的
org.bytedeco.opencv.opencv_core.Mat和OpenCV官方Java绑定的org.opencv.core.Mat是完全独立的类,API并不兼容。你参考的文章是针对OpenCV官方Java接口的,不适用于JavaCV。 - 要查看JavaCV中Mat的内容,可使用以下方法:
- 获取单个像素值:使用
get()的重载方法,以8位单通道灰度图为例:byte[] pixelBuffer = new byte[1]; image.get(2, 3, pixelBuffer); int grayValue = pixelBuffer[0] & 0xFF; // 转换为无符号整数 System.out.println("像素(2,3)的值:" + grayValue); - 打印整个Mat内容:调用
opencv_core类的静态print()方法:
或者直接打印Mat对象,JavaCV的Mat重写了opencv_core.print(image);toString()方法,会输出矩阵的基本信息及部分内容:System.out.println(image);
- 获取单个像素值:使用
- 额外注意:你的代码中构造函数内创建了两个Mat对象,类成员
this.image和局部变量image,局部变量的Mat并未赋值给类成员,会导致类成员为空,后续操作可能引发异常。
内容的提问来源于stack exchange,提问作者Anant Sinha
相关产品推荐
相关产品推荐

