|
发表于 2008-7-3 09:12:08
|
显示全部楼层
EMCV:可在DSP上运行的OpenCV
大家好 我把这个opencv函数可以在我的板子上运行了(瑞泰公司的一款ICETEK-DM642-B的开发板)
首先感谢于老师和chai2010 的帮助
我总结一下错误 一共我遇到的有三处:
1 cxmisc.h的第 233行
CvSize cvGetMatSize(const CvMat* mat)
{
CvSize size = {mat->width,mat->height};
return size;
}出现 这个错误 error: expression must have a constant value
我把mat->width,mat->height用 mat->cols,mat->rows;代替就好了
2在cxtypes.h 的第192行
CV_INLINE int cvFloor( double value )
{
return int(floor(value));
}
出现这个错误 error: expected an expression
改正如下
CV_INLINE int cvFloor( double value )
{
int a = floor(value);
return a;
}
3在cxmisc.h中 line 219
CV_INLINE void* cvAlignPtr( const void* ptr, int align=32)
{
assert( (align & (align-1)) == 0 );
return (void*)(((size_t)ptr + align - 1) & (~(size_t)(align-1)) );
}
函数名那块是 219行 出现了个这样的错误error: expected a ")",
把那个 align 的缺省值 删掉就正确了。
以上是我在用到过程中的3个问题的解决方法,希望对用到的人有用。
另外我要做的是在dsp上进行人脸检测,用cv的adaboost算法,就是用cv的检测目标函数,请问于老师你也在做这个吗?我也会努力的,若果你有更新请及时发到论坛上,谢谢于老师!
你遇到的3个问题应该都是采用C语言的原因。
1. CvMat在C语言中只定义了rows和cols
- typedef struct CvMat
- {
- int type;
- int step;
- /* for internal use only */
- int* refcount;
- int hdr_refcount;
- union
- {
- uchar* ptr;
- short* s;
- int* i;
- float* fl;
- double* db;
- } data;
- #ifdef __cplusplus
- union
- {
- int rows;
- int height;
- };
- union
- {
- int cols;
- int width;
- };
- #else
- int rows;
- int cols;
- #endif
- }
- CvMat;
复制代码
采用rows和cols访问应该是最好的。
2. int(v)的语法C语言不支持
3. C语言不支持默认参数
- cvAlignPtr( const void* ptr, int align=32)
复制代码
OpenCV是用CV_DEFAULT来处理的:- #ifndef CV_EXTERN_C
- #ifdef __cplusplus
- #define CV_EXTERN_C extern "C"
- #define CV_DEFAULT(val) = val
- #else
- #define CV_EXTERN_C
- #define CV_DEFAULT(val)
- #endif
- #endif
复制代码
函数定位改为:
- cvAlignPtr( const void* ptr, int align CV_DEFAULT(32))
复制代码 |
|