我剛剛從Ubuntu 10.04遷移到11.10,我使用的是OpenCV 2.3.1。 對於一些原因,現在當我做這樣的事情:OpenCV - Mat :: convertTo()聲明錯誤。
Mat_<unsigned> a = Mat_<unsigned>(10,2);
Mat_<float> b;
a.convertTo(b,CV_32F);
我得到以下錯誤:
OpenCV Error: Assertion failed (func != 0) in convertTo, file /home/memecs/Desktop/OpenCV-2.3.1/modules/core/src/convert.cpp, line 937
terminate called after throwing an instance of 'cv::Exception'
what(): /home/memecs/Desktop/OpenCV-2.3.1/modules/core/src/convert.cpp:937: error: (-215) func != 0 in function convertTo
Aborted
和功能斷言是:
Mat::convertTo(OutputArray _dst, int _type, double alpha, double beta) const
{
bool noScale = fabs(alpha-1) < DBL_EPSILON && fabs(beta) < DBL_EPSILON;
if(_type < 0)
_type = _dst.fixedType() ? _dst.type() : type();
else
_type = CV_MAKETYPE(CV_MAT_DEPTH(_type), channels());
int sdepth = depth(), ddepth = CV_MAT_DEPTH(_type);
if(sdepth == ddepth && noScale)
{
copyTo(_dst);
return;
}
Mat src = *this;
BinaryFunc func = noScale ? getConvertFunc(sdepth, ddepth) : getConvertScaleFunc(sdepth, ddepth);
double scale[] = {alpha, beta};
int cn = channels();
################### THIS IS THROWING THE ASSERTION ERROR ###############
CV_Assert(func != 0);
if(dims <= 2)
{
_dst.create(size(), _type);
Mat dst = _dst.getMat();
Size sz = getContinuousSize(src, dst, cn);
func(src.data, src.step, 0, 0, dst.data, dst.step, sz, scale);
}
else
{
_dst.create(dims, size, _type);
Mat dst = _dst.getMat();
const Mat* arrays[] = {&src, &dst, 0};
uchar* ptrs[2];
NAryMatIterator it(arrays, ptrs);
Size sz((int)(it.size*cn), 1);
for(size_t i = 0; i < it.nplanes; i++, ++it)
func(ptrs[0], 0, 0, 0, ptrs[1], 0, sz, scale);
}
}
任何幫助嗎?我真的不知道如何解決這個問題。
OpenCV的持有在版本表withing表爲每次可以參考看看功能,每次每種細胞類型可能的(你見過斷言只是檢查是否OpenCV的是能夠找到一個函數擬合所需類型 - 顯然他不能)。大多數函數都可以處理所有定義的OpenCV類型,有些不能(例如 - 重映射無法處理雙精度 - CV_64F)。非可以處理類型「無符號」,堅持char,short,int,float,double和OpenCV矢量類型 – Boaz
解決了這個問題。謝謝! – memecs