gpt4 book ai didi

java - OpenCV C++ calcHist 到 Java

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:54 25 4
gpt4 key购买 nike

我正在尝试让一些 C++ 代码在我的 Android 设备上运行;但是,我遇到了 Mat 类型的一个小问题。我在用着。我尝试转换的代码如下(第二个函数调用第一个):

static Mat
histc_(const Mat& src, int minVal=0, int maxVal=255, bool normed=false)
{
Mat result;
// Establish the number of bins.
int histSize = maxVal-minVal+1;
// Set the ranges.
float range[] = { static_cast<float>(minVal), static_cast<float>(maxVal+1) };
const float* histRange = { range };
// calc histogram
calcHist(&src, 1, 0, Mat(), result, 1, &histSize, &histRange, true, false);
// normalize
if(normed) {
result /= (int)src.total();
}
return result.reshape(1,1);
}

static Mat histc(InputArray _src, int minVal, int maxVal, bool normed)
{
Mat src = _src.getMat();
switch (src.type()) {
case CV_8SC1:
return histc_(Mat_<float>(src), minVal, maxVal, normed);
break;
case CV_8UC1:
return histc_(src, minVal, maxVal, normed);
break;
case CV_16SC1:
return histc_(Mat_<float>(src), minVal, maxVal, normed);
break;
case CV_16UC1:
return histc_(src, minVal, maxVal, normed);
break;
case CV_32SC1:
return histc_(Mat_<float>(src), minVal, maxVal, normed);
break;
case CV_32FC1:
return histc_(src, minVal, maxVal, normed);
break;
default:
CV_Error(Error::StsUnmatchedFormats, "This type is not implemented yet."); break;
}
return Mat();
}

现在我的 Java 代码将这 2 个函数合二为一,因为我的类型始终相同:CV_32SC1。

private Mat histc(Mat src, int minVal, int maxVal)
{
Mat result = new Mat();

MatOfInt histSize = new MatOfInt(maxVal - minVal + 1);

MatOfFloat histRange = new MatOfFloat(minVal, maxVal + 1);
MatOfInt channels = new MatOfInt(0);
Log.d(TAG, "Type: " + CvType.typeToString(src.type()));
src.convertTo(src, CvType.CV_32S);
Imgproc.calcHist(Arrays.asList(src), channels, new Mat(), result, histSize, histRange);

return result.reshape(1,1);
}

我遇到错误 OpenCV Error: Unsupported format or combination of formats () in void cv::calcHist我从另一个问题中发现这是因为我的类型 src矩阵是 CV_32SC1 .所以我的问题是我不知道如何将这些行从第二个 c++ 函数正确转换为 Java:

case CV_32SC1:
return histc_(Mat_<float>(src), minVal, maxVal, normed);
break;

我正在尝试弄清楚如何做类似于 Mat_<float>(src) 的事情特别是在 Java 中。

供引用:here是我现在正在尝试做的整个代码的链接

最佳答案

Mat_<float>(src)

根据calcHist 的要求,使用src 的内容创建一个CV_32F 类型的新Mat 对象。 .

所以做一个就足够了

src.convertTo(src, CvType.CV_32F);

关于java - OpenCV C++ calcHist 到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com