qq_24076833 2020-07-15 11:08 采纳率: 0%
浏览 222
已采纳

c++如何根据变量的值决定另一个变量的类型?

比如我要对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));
        }
    }
}
  • 写回答

1条回答 默认 最新

  • bobhuang 2020-07-15 11:21
    关注

    比较好的办法是用矩阵运算,而不是对每个元素自己写计算操作。opencv内部有些SIMD计算加速,或者显卡加速等机制,比循环效率高。
    参考:
    https://blog.csdn.net/spw_1201/article/details/53482877

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?