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

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

报告相同问题?

悬赏问题

  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误
  • ¥15 Minifilter文件保护
  • ¥15 有限元软件终止时间超过设定值
  • ¥15 onvif框架引用一直报错
  • ¥50 C#和C++混合编程,使用CLR托管,报错System.Runtime.InteropServices.SEHException
  • ¥30 .NET使用sqlite发布后报错
  • ¥15 Unity在WebGL平台导出Word报错问题