opencv源码修改与使用:fastNlMeansDenoisingMulti()对CV_16U的支持

在opencv3.3中我在使用fastNlMeansDenoisingMulti()

我发现说函数 当输入的参数是NORM_L1 支持U16类型的图像输入格式

但是在实际使用中一直在报错 说"Unsupported image format! Only CV_8U, CV_8UC2, CV_8UC3 and CV_8UC4 are supported"

于是乎我就看了下opencv photo mudule中的代码,在denoising.cpp中

我发现在fastNlMeansDenoisingMulti()中支持这个类型

        case NORM_L1:
            switch (depth) {
                case CV_8U:
                    fastNlMeansDenoisingMulti_<uchar, int, unsigned,
                                               DistAbs>(srcImgs, dst,
                                                        imgToDenoiseIndex, temporalWindowSize,
                                                        h,
                                                        templateWindowSize, searchWindowSize);
                    break;
                case CV_16U:
                    printf("NLM multi U16\n");
                    fastNlMeansDenoisingMulti_<ushort, int64, uint64,
                                               DistAbs>(srcImgs, dst,
                                                        imgToDenoiseIndex, temporalWindowSize,
                                                        h,
                                                        templateWindowSize, searchWindowSize);

但是在转入fastNlMeansDenoisingMulti_()函数后

    switch (srcImgs[0].type())
    {
        case CV_8U:
...
        case CV_8UC2:
...
        case CV_8UC3:
...
        case CV_8UC4:
...
        default:
            CV_Error(Error::StsBadArg,
                "Unsupported image format! Only CV_8U, CV_8UC2, CV_8UC3 and CV_8UC4 are supported");

所以应该是在这个函数中没有实现对CV_16U的支持

于是我在line266添加了以下内容

        case CV_16U:
	        parallel_for_(cv::Range(0, srcImgs[0].rows),
            		        FastNlMeansMultiDenoisingInvoker<ushort, IT, UIT, D, int>(
                                srcImgs, imgToDenoiseIndex, temporalWindowSize,
                                dst, templateWindowSize, searchWindowSize, &h[0]),
                            granularity);
            break;


重新编译了opencv_world330d.lib opencv_world330d.dll opencv_world330.lib opencv_world330.dll 


现在就可以愉快的使用新功能啦~




















  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值