我是Opencv的新手,想要用Java获取Imagen的Intensity值。
我使用Paint 4x4像素制作了一个图像,希望从中获取Intensity值并在控制台中打印。
import org.opencv.core.Core;
public class helloCV{
public static void main(String[]args){
System.out.println("OpenCv v"+Core.VERSION);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//Code for get intesivy values
}
}
答案 0 :(得分:1)
mat.get(row,col)返回double [],此数组的大小为mat.channels()。 该数组包含强度值。
因此对于CvType.CV_8UC1,此数组的长度为1
并且对于CvType.CV_8UC3,它返回一个包含3个值的数组。
mat.rows()和mat.cols()提供mat中的行数和列数。
mat.dump()为完整的Mat提供强度值,与所有行和列的mat.get()相同。
mat.eye()返回指定大小和类型的单位矩阵。强度值将为零,并且沿着矩阵的对角线具有一个强度值。
答案 1 :(得分:0)
因为,OpenCV中的图像使用矩阵表示。这是一种查找特定像素的强度值的方法。
Scalar intensity = img.at<uchar>(y, x);
上面的行意味着,我们正在访问像素(y,x)并将其数据类型指定为unsigned char。
要找到给定点的相同内容,
Scalar intensity = img.at<uchar>(Point(x, y));
不要忘记导入Numpy以使用标量。
答案 2 :(得分:0)
我找到了能满足我需求的东西:
import java.net.URL;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
public class helloCV{
public static void main(String[]args){
System.out.println(Core.VERSION);
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
mat = Highgui.imread("C:\\Users\\HM\\Pictures\\ImageDemo.png");
System.out.println("mat = " + mat.dump());
}
}
我想打印每个像素的RGB值矩阵:
run:
2.4.9.0
mat = [88, 88, 88, 127, 127, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255;
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255;
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255;
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255;
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]
其中前3个数字(88,88,88)表示第一个像素的RGB颜色,每个像素每3个数字。我没错?
但Mat mat = Mat.eye(3, 3, CvType.CV_8UC1)
和mat.dump()
是什么意思?