我最近遇到了一些使用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
此图片,即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
答案 0 :(得分:3)
首先,如果未指定排序,OpenCV倾向于使用BGR而不是RGB。使用cvtColor
将其从BGR更改为RGB是准确的。
其次,getPixelColor
来电参数不是(x, y)
,而是(row, column)
,相当于(y, x)
。这意味着右上角实际上是左下角,反之亦然。