【问题标题】:How can get the intensity values of an Image in OpenCv如何在 OpenCv 中获取图像的强度值
【发布时间】:2016-01-15 05:49:27
【问题描述】:

我是 Opencv 新手,想在 Java 中获取 Imagen 的强度值。

我使用 Paint 4x4 像素制作了一个图像,希望从中获取强度值并在控制台中打印它。

Super tiny Image Demo *这个

Big Image Demo

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
    }
}

【问题讨论】:

    标签: java opencv


    【解决方案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() 返回指定大小和类型的单位矩阵。沿矩阵对角线的强度值将为零和一加一。

    更多关于垫子的信息:http://docs.opencv.org/2.4/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html

    【讨论】:

    • 感谢老兄的信息!
    【解决方案2】:

    因此,OpenCV 中的图像使用矩阵表示。这是一种查找特定像素强度值的方法。

    Scalar intensity = img.at<uchar>(y, x);
    

    上面一行的意思是,我们正在访问像素 (y,x) 并将其数据类型指定为无符号字符。

    要找到给定点的相同点,

    Scalar intensity = img.at<uchar>(Point(x, y));
    

    不要忘记导入 Numpy 以使用 Scalar。

    【讨论】:

    • img.at&lt;uchar&gt; 表示图像是 8 位单通道图像
    【解决方案3】:

    我找到了符合我要求的东西:

    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() 是什么意思?

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2013-03-14
      相关资源
      最近更新 更多