我正在将本机C++函数转换为Java,但有时会卡住。

这是引起我问题的本机代码。

for(int x=0; x < inputMat.cols; x++)
{
    for(int y=0; y < inputMat.rows; y++)
    {
        for(int c=0; c < 4; c++)
        {
            grayMat.at<cv::Vec4b>(y,x)[c] = (grayMat.at<cv::Vec4b>(y,x)[c] == 255 ? 255 : std::min(255,grayMat.at<cv::Vec4b>(y,x)[c]*255/(255-grayMat.at<cv::Vec4b>(y,x)[c])));
        }
    }
}

这是我上面的Java代码的转换版本
for(int x = 0; x < inputMat.cols(); x++){
        for(int y = 0; y < inputMat.rows(); y++){

            double data[] = new double[4];
            for(int c = 0; c < 4; c++){

                data[c] = grayMat.get(y,x)[c] == 255 ? 255 Math.min(255,grayMat.get(y,x)[c]*255/(255-grayMat.get(y,x)[c]));
                grayMat.put(y,x,data[c]);

            }
        }
    }

我收到以下错误:



注意greyMat包含4种颜色BGRA

最佳答案

问题出在您的电话中:

grayMat.put(y,x,data[c]);

一方面,它位于最内层的循环中。对于另一个,仅在需要4时设置一个值(如错误所示)。

将其移到循环外,并传递整个数组:
for(int c = 0; c < 4; c++){
  data[c] = ...
}
grayMat.put(y,x,data);

10-08 19:15