我正在将本机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);