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

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

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

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?