gpt4 book ai didi

java - 使用 JavaCV API 访问 Mat 的像素值

转载 作者:搜寻专家 更新时间:2023-11-01 01:41:50 30 4
gpt4 key购买 nike

我最近从 OpenCV C++ API 切换到 JavaCV,我正在尝试执行基本操作,例如迭代 Mat。我正在尝试访问 Mat 的像素值,但我似乎找不到办法,而且 JavaCV 项目缺少文档。使用 OpenCV C++ API,我曾经使用 .at() 方法访问 Mat 的像素值。

垫子加载为 CV_8UC1 垫子(灰度),如您在下面的代码中所见,我想打印/使用像素的 0-255 值。

    Mat image = imread("images/Text00.png", CV_8UC1);

// Make sure it was successfully loaded.
if (image == null) {
System.out.println("Image not found!");
System.exit(1);
}

System.out.println(image.rows());
System.out.println(image.cols());

for (int y = 0; y < image.rows(); y++) {

for (int x = 0; x < image.cols(); x++) {

// How to print the 0 to 255 value of each pixel in the Mat image.
}
}

类似但不适用的答案:

最佳答案

对此,seemingly unrelated thread在 JavaCV GitHub 讨论中,经过 1 天的谷歌搜索,我找到了问题的答案。请注意,可能还有其他更有效的方法可以做到这一点,但这是我目前找到的唯一方法。该解决方案由 JavaCV 提供的新“索引器”包表示(有关更多详细信息,请参阅 thisthis)。

它的用法非常简单:在声明类似 DoubleIndexer idx = Mat.createIndexer() 之后,您可以调用 idx.get(i, j) 来获取元素矩阵的更容易。

这是我更新的代码(如您所见,我使用了 UByteBufferIndexer,因为我的垫子是 CV_8UC1 垫子):

    Mat image = imread("images/Text00.png", CV_8UC1);

// Make sure it was successfully loaded.
if (image == null) {
System.out.println("Image not found!");
System.exit(1);
}

UByteBufferIndexer sI = image.createIndexer();

for (int y = 0; y < image.rows(); y++) {

for (int x = 0; x < image.cols(); x++) {

System.out.println( sI.get(y, x) );
}
}

关于java - 使用 JavaCV API 访问 Mat 的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33035781/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com