为什么 RGBA 位图需要 3x3 阵列来存储 1 个像素,如何避免这种情况?
Why does an RGBA bitmap require a 3x3 array to store 1 pixel and how can this be avoided?
我有一张 1x1 jpg 图片,由单一的红色组成。
我以这种方式从可绘制图像 (Android) 创建位图:
Bitmap bitmap_image = BitmapFactory.decodeResource(getResources(), R.drawable.onebyonered);
但是,在位图上调用 getWidth()
和 getHeight()
输出 3、3。
然后我将位图转换为 OpenCV 矩阵:
Mat matrix = new Mat(1, 1, CvType.CV_64FC1);
// System.out.println(matrix);
Utils.bitmapToMat(bitmap_image, matrix);
// System.out.println(matrix);
System.out.println(matrix.dump());
第一个打印语句returnsMat [ 1*1*CV_64FC1, ...
,第二个打印语句returnsMat [ 3*3*CV_8UC4, ...
和矩阵转储(转换为字符串)显示:
[255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255]
灰度化使用:
Imgproc.cvtColor(matrix, matrix, Imgproc.COLOR_RGBA2GRAY);
生成 3x3x1 而不是预期的 1x1x1:
[ 76, 76, 76;
76, 76, 76;
76, 76, 76]
鉴于上面提到的高度和宽度,并假设转储应该是 RGBA 格式 - 为什么需要 9 个不同的值来表示 1 像素的单色图像?我怎样才能把这个 3x3x1 变成我想要的 1x1x1 [76]?理想情况下,我使用的任何转换技术都应该是可逆的,或者我能够显示位图图像。
调用 getWidth()
和 getHeight()
返回 3x3,因为系统正在根据设备密度缩放您的图像,因此它返回了错误的尺寸。将图像放入 assets
并从那里加载或将其放入 drawable-nodpi
文件夹。
我有一张 1x1 jpg 图片,由单一的红色组成。
我以这种方式从可绘制图像 (Android) 创建位图:
Bitmap bitmap_image = BitmapFactory.decodeResource(getResources(), R.drawable.onebyonered);
但是,在位图上调用 getWidth()
和 getHeight()
输出 3、3。
然后我将位图转换为 OpenCV 矩阵:
Mat matrix = new Mat(1, 1, CvType.CV_64FC1);
// System.out.println(matrix);
Utils.bitmapToMat(bitmap_image, matrix);
// System.out.println(matrix);
System.out.println(matrix.dump());
第一个打印语句returnsMat [ 1*1*CV_64FC1, ...
,第二个打印语句returnsMat [ 3*3*CV_8UC4, ...
和矩阵转储(转换为字符串)显示:
[255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255]
灰度化使用:
Imgproc.cvtColor(matrix, matrix, Imgproc.COLOR_RGBA2GRAY);
生成 3x3x1 而不是预期的 1x1x1:
[ 76, 76, 76;
76, 76, 76;
76, 76, 76]
鉴于上面提到的高度和宽度,并假设转储应该是 RGBA 格式 - 为什么需要 9 个不同的值来表示 1 像素的单色图像?我怎样才能把这个 3x3x1 变成我想要的 1x1x1 [76]?理想情况下,我使用的任何转换技术都应该是可逆的,或者我能够显示位图图像。
调用 getWidth()
和 getHeight()
返回 3x3,因为系统正在根据设备密度缩放您的图像,因此它返回了错误的尺寸。将图像放入 assets
并从那里加载或将其放入 drawable-nodpi
文件夹。