[英]OpenCV C++ calcHist to Java
我正在嘗試讓一些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個函數合並為1,因為我的類型始終是相同的: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;
我試圖弄清楚如何在Java中專門執行類似於Mat_<float>(src)
。
供參考: 這是我現在正在嘗試執行的整個代碼的鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.