1

我正在尝试使用 AdaptiveThreshold 方法对 RGB 图像进行二值化。我的代码如下:

public byte[] filter(byte[] buff, int width, int height) {

    Mat img_rgb = new Mat(width, height, CvType.CV_8UC3);
    Mat img_gray = new Mat(width, height, CvType.CV_8U);
    Mat img_bin = new Mat(width, height, CvType.CV_8U);     

    img_rgb.put(0, 0, buff);        
    Imgproc.cvtColor(img_rgb, img_gray, Imgproc.COLOR_RGB2GRAY);                
    Imgproc.adaptiveThreshold(img_gray, img_bin, 255, 
               Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 5, 2);

    int size = (int) img_bin.total() * img_bin.channels();
    byte[] bin_buff = new byte[size];
    img_bin.get(0, 0, bin_buff);

    return bin_buff;

}

应用adaptiveThreshold后数据的最大值img_bin应该是255,但它是-1。为什么会这样?我是 OpenCV 的新手,我找不到任何解释。

提前致谢。

4

1 回答 1

1

有符号字节中 -1 的二进制补码表示等于无符号字节中 255 的补码表示。这可能是您的代码中某处缺少强制转换。

于 2013-04-04T16:47:57.653 回答