OpenCV-使用Java填充图像 使用C++时,它工作得很好,代码BoLo: Mat floodFilled = cv::Mat::zeros(dilateGrad.rows + 2, dilateGrad.cols + 2, CV_8U); floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY); floodFilled = cv::Scalar::all(255) - floodFilled; Mat temp; floodFilled(Rect(1, 1, dilateGrad.cols - 2, dilateGrad.rows - 2)).copyTo(temp); floodFilled = temp; imshow("5. Floodfill", floodFilled);
在java my代码中,它类似于:OpenCV-使用Java填充图像 使用C++时,它工作得很好,代码BoLo: Mat floodFilled = cv::Mat::zeros(dilateGrad.rows + 2, dilateGrad.cols + 2, CV_8U); floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY); floodFilled = cv::Scalar::all(255) - floodFilled; Mat temp; floodFilled(Rect(1, 1, dilateGrad.cols - 2, dilateGrad.rows - 2)).copyTo(temp); floodFilled = temp; imshow("5. Floodfill", floodFilled);,java,c++,opencv,image-processing,Java,C++,Opencv,Image Processing,在java my代码中,它类似于: private static Mat floodFill(Mat img) { Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols()+2, CvType.CV_8U); Imgproc.floodFill(img, floodfilled, new Point(0,0), new Scalar(0,255,0)); return floodfilled; } 结果是,我返回的图
private static Mat floodFill(Mat img)
{
Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols()+2, CvType.CV_8U);
Imgproc.floodFill(img, floodfilled, new Point(0,0), new Scalar(0,255,0));
return floodfilled;
}
结果是,我返回的图像与我在函数中接收到的图像完全相同。我的意思是,我期望填充图像,但我得到了原始图像作为结果,也就是说,没有发生任何事情。使用此代码可以很好地工作:
private static Mat floodFill(Mat img)
{
Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols() + 2, CvType.CV_8U);
Imgproc.floodFill(img, floodfilled, new Point(0, 0), new Scalar(255), new OpenCVForUnity.Rect(), new Scalar(0), new Scalar(0), 4 + (255 << 8) + Imgproc.FLOODFILL_MASK_ONLY);
Core.subtract(floodfilled, Scalar.all(0), floodfilled);
Rect roi = new Rect(1, 1, img.cols() - 2, img.rows() - 2);
Mat temp = new Mat();
floodfilled.submat(roi).copyTo(temp);
img = temp;
//Core.bitwise_not(img, img);
return img;
}
private static Mat floodFill(Mat img)
{
Mat floodfilled=Mat.zero(img.rows()+2,img.cols()+2,CvType.CV_8U);
floodFill(img,floodFill,new Point(0,0),new Scalar(255),new OpenCVForUnity.Rect(),new Scalar(0),new Scalar(0),new Scalar(0),4+)(255)两个建议:显示更多Java代码,并显示您得到的特定错误。明白了。编辑。酷-下一个问题我关心您的预期结果。您说“结果是,我返回的图像与我在函数中收到的图像完全相同。”这与您的期望有什么不同?一个很好的“it's break”报告格式是:“我看到了A,但期望B”。从您的问题中,我不清楚您期望的是什么,而不是您得到的是什么。再次获取。感谢您提供的提示,请编辑
private static Mat floodFill(Mat img)
{
Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols() + 2, CvType.CV_8U);
Imgproc.floodFill(img, floodfilled, new Point(0, 0), new Scalar(255), new OpenCVForUnity.Rect(), new Scalar(0), new Scalar(0), 4 + (255 << 8) + Imgproc.FLOODFILL_MASK_ONLY);
Core.subtract(floodfilled, Scalar.all(0), floodfilled);
Rect roi = new Rect(1, 1, img.cols() - 2, img.rows() - 2);
Mat temp = new Mat();
floodfilled.submat(roi).copyTo(temp);
img = temp;
//Core.bitwise_not(img, img);
return img;
}