从垫子读取时像素颜色的值错误

时间:2015-07-08 18:56:25

标签: java opencv pixels

我最近遇到了一些使用Open CV和java获取像素颜色的问题。这就是我所做的。

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    Mat a = Imgcodecs.imread("C:\\Users\\User\\workspace\\OpenCv\\color.png",Imgcodecs.CV_LOAD_IMAGE_COLOR);
    System.out.println(Arrays.toString(getPixelColor(0, 0, a))); //top left
    System.out.println(Arrays.toString(getPixelColor(9, 0, a))); //top right
    System.out.println(Arrays.toString(getPixelColor(0, 9, a))); // bottom left 
    System.out.println(Arrays.toString(getPixelColor(9, 9, a))); // bottom right

所以这段代码返回以下内容

[255.0, 255.0, 0.0] //top left
[0.0, 0.0, 255.0] //top right
[255.0, 0.0, 0.0] // bottom left 
[0.0, 255.0, 255.0]// bottom right

此图片enter image description here,即10 * 10图片。

这是photoshop对每种颜色的正确值。

[0, 255.0, 255.0] Cyan //top left
[0.0, 0.0, 255.0] Blue //top right
[255.0, 0.0, 0.0] Red // bottom left 
[255.0, 255.0, 0] Yellow // bottom right

图像从类型CV_8UC3加载为mat,因此它的rbg。

任何人都知道为什么会这样? 另外如果我使用cvtColor来改变bgr - > rbg我还没有得到正确的输出

[0.0, 255.0, 255.0] Cyan ok //top left
[255.0, 0.0, 0.0] Should be blue  , is red //top right
[0.0, 0.0, 255.0] Should be red , is blue // bottom left
[255.0, 255.0, 0.0] Yellow ok // bottom right

1 个答案:

答案 0 :(得分:3)

首先,如果未指定排序,OpenCV倾向于使用BGR而不是RGB。使用cvtColor将其从BGR更改为RGB是准确的。

其次,getPixelColor来电参数不是(x, y),而是(row, column),相当于(y, x)。这意味着右上角实际上是左下角,反之亦然。