错误.表达式必须具有类类型
Error. Expression must have a class type
我正在尝试将Mat
传递给函数,但是当我尝试获取图像的float
数据时出现一些错误。有人可以启发我出了什么问题吗?
int _tmain(int argc, _TCHAR* argv[])
{
cv::Mat img;//gradients from fingerprint image
cv::Mat dst;
bh2Rad(&img,&dst);
}
void bh2Rad(Mat* srcMat,cv::Mat* dstMat)
{
for (int i=0; i < srcMat->rows ;i++)
{
float* srcP = srcMat->data.fl + srcMat->width * i;// srcMat Error.
float* dstP = dstMat->data.fl + dstMat->width * i;//dstMat Error
for (int j = 0; j < srcMat->cols ;j++)
dstP[j] = srcP[j] * BH_DEG_TO_RAD;
}
}
你似乎混淆了较旧的(c-api)CvMat与cv::Mat与像素操作。
此外,灰度图像是 uchar,而不是浮点数,并且您无法以任意格式访问其像素(除非您之前将 convertTo() 浮点数)。
int main(int argc, char* argv[])
{
cv::Mat img = cv::imread("original.bmp", CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat dst;
bh2Rad(img,dst);
}
//
// please use references with cv::Mat, not pointers.
// those things are refcounted, you're thrashing that with passing pointers.
//
void bh2Rad(const cv::Mat & srcMat, cv::Mat & dstMat)
{
dstMat.create(srcMat.size(),srcMat.type());
for (int i=0; i < srcMat.rows ;i++)
{
const uchar* srcP = srcMat.ptr<uchar>(i);
uchar* dstP = dstMat.ptr<uchar>(i);
for (int j = 0; j < srcMat.cols ;j++)
dstP[j] = srcP[j] * BH_DEG_TO_RAD;
}
}
该错误标记了您未使用命名空间 CV 限定 Mat 的唯一实例。我假设您没有命名空间 CV 的 using 指令,因此仅在 CV 中声明的类型 Mat 是未知且无法识别的。
void bh2Rad(cv::Mat* srcMat, cv::Mat* dstMat)
(注意 cv::紧跟在左括号之后)。
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 表达式必须具有类类型 vs.
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 非类类型表达式的静态类型与动态类型之间的差异
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 带有数组类型表达式的错误分配
- 表示函数参数的元组的类型表达式
- 如何确定撤销类型表达式的更大类型
- c++ 11中有新的函数类型表达式格式吗?