以下两张图片0x7c00 through 0x7e00
中的第一张是rgbaMat.bmp
格式的5px*5px
.bmp
张图片。该图片是使用RGBA
从SD卡中读取的,然后使用Highgui.imread
转换为HSV
,生成Imgproc.cvtColor(rgbaMat, hsvMat, Imgproc.COLOR_BGR2HSV);
(第二张图片):
以下是在MS Paint中放大到hsvMat.bmp
的相同图像,供观看之用。
然后在执行以下代码后,我得到的图像100px*100px
如下,后面是放大版本。
问题在于我在编写代码时所期望的是备用像素应该具有 white (changedMat.bmp
)和 black (` `)色调分别,可以检查in the HSV section on this website。但我得到的是红色和黑色。
问题是为什么?我哪里错了?
H=0, S=0, V=255
............................................... .................................................. .................................................. ................
编辑:
第11行和第28行的public void doProcessing(View view) {
Mat rgbaMat = Highgui.imread("/mnt/sdcard/DCIM/rgbaMat.bmp");
Mat hsvMat = new Mat();
Imgproc.cvtColor(rgbaMat, hsvMat, Imgproc.COLOR_BGR2HSV);
Highgui.imwrite("/mnt/sdcard/DCIM/hsvMat.bmp", hsvMat);//check
int counter=1;
for (int firstCoordinate = 0; firstCoordinate<hsvMat.rows(); firstCoordinate++) {
for (int secondCoordinate = 0; secondCoordinate<hsvMat.cols(); secondCoordinate++) {
Log.i(TAG, "HAPPY " + Arrays.toString(hsvMat.get(firstCoordinate, secondCoordinate)));//check
double[] pixelChannels = hsvMat.get(firstCoordinate, secondCoordinate);
if (counter%2 != 0) {
pixelChannels[0]=0;
pixelChannels[1]=0;
pixelChannels[2]=255;
} else {
pixelChannels[0]=0;
pixelChannels[1]=0;
pixelChannels[2]=0;
}
hsvMat.put(firstCoordinate, secondCoordinate, pixelChannels);
counter++;
Log.i(TAG, "HAPPY PAPPY" + Arrays.toString(hsvMat.get(firstCoordinate, secondCoordinate)));//check
}
}
Highgui.imwrite("/mnt/sdcard/DCIM/matChanged.bmp", hsvMat);//check
}
语句打印出以下输出,这是好的。
Log.i
答案 0 :(得分:0)
为了检查,我将像素的HSV转换为Android Color并使用
记录了Android Color的值//CONVERTING HSV COLOR TO ANDROID COLOR
//Step 1: Convert double[] to float[]. Step 2: Scale the float[]. STep 3: Use Android's HSVToColor method
float[] channelsFloatArrayScaled = new float[3];
for (int i = 0; i < hsvMat.get(firstCoordinate, secondCoordinate).length; i++) {
if (i == 0) {
channelsFloatArrayScaled[i] = ((float) hsvMat.get(firstCoordinate, secondCoordinate)[i]) * 2;// TODO Wrap an ArrayIndexOutOfBoundsException wrapper
} else if (i == 1 || i == 2) {
channelsFloatArrayScaled[i] = ((float) hsvMat.get(firstCoordinate, secondCoordinate)[i]) / 255;// TODO Wrap an ArrayIndexOutOfBoundsException wrapper
}
}
int androidColor = Color.HSVToColor(channelsFloatArrayScaled);
Log.i(TAG, "HAPPY PAPPY FAPPY" + androidColor);//check
结果是-1
和-1777216
在替代像素中,代表白色和黑色。
所以一切都很好,除了我在将图像写入SD卡(最后imwrite
)时我不知道OpenCV在做什么。