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

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 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)