我有一张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());
第一条打印语句返回
Mat [ 1*1*CV_64FC1, ...
,第二个print语句返回
Mat [ 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?理想情况下,我使用的任何转换技术都应该是可逆的,或者我能够显示位图图像。