比如我要对opencv矩阵中的每个元素取对数,矩阵元素的类型有uchar,char,ushort,short,int,float,double7种,但7种都是数值类型,我想返回一个与输入矩阵size和type都相同的对数矩阵,我该怎么做,如果用条件判断我该用什么保存数据类型,试过#define,typedef好像都不行,#define在预编译期间就会确定,条件语句无法约束它,typedef会重定义报错。
比如下面代码中的ELEMTYPE应该怎么实现:
Mat logImg(Mat img){
Mat res(img.size(), CV_8U);
if (img.channels() == 3) {
cvtColor(img, img, CV_BGR2GRAY);
}
switch(img.depth()){
case CV_8U:
//ELEMTYPE=uchar;
case CV_8S:
//ELEMTYPE=char;
case CV_16U:
//ELEMTYPE=ushor;
case CV_16S:
//ELEMTYPE=short;
case CV_32S:
//ELEMTYPE=int;
case CV_32F:
//ELEMTYPE=float;
case CV_64F:
//ELEMTYPE=double;
}
for(int i=0;i<img.rows;i++){
for(int j=0;j<img.cols;j++){
res.at<uchar>(i,j)=(uchar)(log(img.at<ELEMTYPE>(i,j)+1)*255/log(256));
}
}
}