Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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);

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; } 结果是,我返回的图

在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(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;
}