从垫子上读取时像素颜色的错误值
Wrong value of pixels color when reading from a mat
我最近在使用 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
所以这段代码returns下面
[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 类型的垫子,所以它是 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
首先,如果未指定顺序,OpenCV 倾向于使用 BGR 而不是 RGB。使用cvtColor
将其从BGR更改为RGB是准确的。
其次,getPixelColor
的调用参数不是(x, y)
,而是(row, column)
,相当于(y, x)
。这意味着看似右上角的实际上是左下角,反之亦然。
我最近在使用 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
所以这段代码returns下面
[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
这张图片
这是 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 类型的垫子,所以它是 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
首先,如果未指定顺序,OpenCV 倾向于使用 BGR 而不是 RGB。使用cvtColor
将其从BGR更改为RGB是准确的。
其次,getPixelColor
的调用参数不是(x, y)
,而是(row, column)
,相当于(y, x)
。这意味着看似右上角的实际上是左下角,反之亦然。