有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Opencv在图片中查找红色

我尝试使用opencv在照片中查找红色。然而,每次都以一张全黑的照片结束

我找到了照片中所有的红色、蓝色和绿色。然后,我将三个img绿色、红色和蓝色分开

这是我的密码

Mat mat1 = new Mat();
  mat1 = Highgui.imread("test2.jpg");
  int h = mat1.height();
  int w = mat1.width();

  Mat temp8u = new Mat(h, w, CvType.CV_8UC1);
  Mat imgR =  new Mat(h, w, CvType.CV_32FC1);
  Mat imgG =  new Mat(h, w, CvType.CV_32FC1);
  Mat imgB =  new Mat(h, w, CvType.CV_32FC1);
  Mat temp =  new Mat(h, w, CvType.CV_32FC1);
  Mat temp1 =  new Mat(h, w, CvType.CV_32FC1);  
  Mat temp2 =  new Mat(h, w, CvType.CV_32FC1);
  Mat temp3 =  new Mat(h, w, CvType.CV_32FC1);
  Mat temp4 =  new Mat(h, w, CvType.CV_32FC1);

  List<Mat> listImg = new ArrayList<Mat>(3);
  Core.split(mat1, listImg);
  Mat imgR8u = listImg.get(0);  
  Mat imgG8u = listImg.get(1); 
  Mat imgB8u = listImg.get(2);
  imgR8u.convertTo(imgR, CvType.CV_32FC1);
  imgG8u.convertTo(imgG, CvType.CV_32FC1);
  imgB8u.convertTo(imgB, CvType.CV_32FC1);

  int size = (int) (imgR.total() * imgR.channels());                //方法2
  float[] buff = new float[size];
  imgR.get(0, 0, buff);
  for (int i = 0; i < size; i++)
    if (buff[i] > 200)
        buff[i] = (float) 255;
    else
        buff[i] = (float) 0;
    //buff[i] = (byte) (255 - buff[i]);
  temp1.put(0, 0, buff);

  Core.add(imgR,imgG,temp);
  Core.add(temp,imgB,temp);
  Core.add(temp, new Scalar(1,1,1), temp);
  Core.divide(imgR,temp,temp2);
  Imgproc.threshold(temp2, temp2,0.37,255,Imgproc.THRESH_BINARY);

  Core.divide(imgG,temp,temp3);
  Imgproc.threshold(temp3,temp3,0.30,255,Imgproc.THRESH_BINARY_INV);

  Core.divide(imgB,temp,temp4);
  Imgproc.threshold(temp4,temp4,0.32,255,Imgproc.THRESH_BINARY_INV);

  Core.bitwise_and(temp1,temp2,temp2);
  Core.bitwise_and(temp2,temp3,temp3);
  Core.bitwise_and(temp3,temp4,temp);

  temp.convertTo(temp8u, CvType.CV_8UC1);

  Highgui.imwrite("Threshold.jpg", temp8u);

为什么我最后的照片,门槛。jpg都是黑人吗


共 (0) 个答案