洪水填充不会影响位图,而且Mat.get(col,row)返回的颜色是错误的。
我所做的事情: a)检查位图和矩阵的大小是否相同。 2)检查RGB和BGR两种颜色。 3)检查初始bmp和最终bmp(在应用洪水填充之后)。 4)检查了两个签名的洪水填充
public void flood(int x,int y,int sourceColor,int newColor){
try {
Bitmap bmp;
if(OpenCVLoader.initDebug()){
image = new Mat();
mat1 = new Mat();
Utils.bitmapToMat(bmp2,mat1);
image = Mat.zeros(mat1.rows()+2,mat1.cols()+2,CvType.CV_8U);
if(bmp2.getWidth()==mat1.cols()){}
}
int k = mat1.channels();
int col = bmp2.getPixel(x, y);
int alpha = col & 0xFF000000;
int red = (col & 0x00FF0000) >> 16;
int green = (col & 0x0000FF00) >> 8;
int blue = (col & 0x000000FF);
double[] tt = (mat1.get(x,y));
Imgproc.cvtColor(mat1,mat1,Imgproc.COLOR_BGRA2BGR);
tt = (mat1.get(x,y));
//Imgproc.floodFill(mat1,image,p1,new Scalar(blue,green,red),new Rect(),new Scalar(230),new Scalar(220),4 + (255<<8) + Imgproc.FLOODFILL_MASK_ONLY);
Imgproc.floodFill(mat1,image,p1,new Scalar(255,255,255));
Core.subtract(image, Scalar.all(0), image);
Rect roi = new Rect(1, 1, mat1.cols() - 2, mat1.rows() - 2);
Mat temp = new Mat();
image.submat(roi).copyTo(temp);
mat1 = temp;
bmp = Bitmap.createBitmap(mat1.cols(),mat1.rows(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mat1,bmp);
}catch(CvException ex){
System.out.println(ex.getMessage());
ex.getLocalizedMessage();
}
}
任何帮助将不胜感激。预先感谢。