作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

场景需求

使用OpenCV,不免有对图像某些区域进行NaN处理的需求,许多初学者不清楚如何将图像数据,进行类似于matlab的nan处理,即设为不可表示的空值。

特此分享自己写的一个简单的NaN处理函数,将掩膜区内的数值保留,掩膜外的数值变为nan值。

判断某值A是不是nan值,只需要A==A即可,若bool为false,则A为nan值,nan值是不等于nan值的。

       注意:nan加任何值都为nan。

C++实现代码

void SetToNan(cv::Mat& src, const cv::Mat& mask)
{CV_Assert(src.type() == CV_32FC1);  // 32FC是float型,这个可以按需自己修改cv::Mat _nan(src.size(), src.type(), nan(""));// setTo函数是将满足条件的点设为指定的数值// 记录mask中不为0的点,将_nan相同位置的这些点设为0_nan.setTo(0, mask);  // mask一般是8UC1型,即内在数据为0-255整数型数值// nan加任何值都为nansrc = src + _nan;
}

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>using namespace std;
using namespace cv;void SetToNan(cv::Mat& src, const cv::Mat& mask);int main(void)
{Mat A = Mat::ones(500, 500, CV_32FC1);Mat mask = Mat::zeros(500, 500, CV_8UC1);circle(mask, Point2i(250, 250), 100, 255, -1);Mat A2 = A.clone();SetToNan(A2, mask);system("pause");return 0;
}void SetToNan(cv::Mat& src, const cv::Mat& mask)
{CV_Assert(src.type() == CV_32FC1);  // 32FC是float型,这个可以按需自己修改cv::Mat _nan(src.size(), src.type(), nan(""));// setTo函数是将满足条件的点设为指定的数值// 记录mask中不为0的点,将_nan相同位置的这些点设为0_nan.setTo(0, mask);  // mask一般是8UC1型,即内在数据为0-255整数型数值// nan加任何值都为nansrc = src + _nan;
}

测试效果

图1 处理前

图2 处理后

       注意:处理后的数据是NaN值而不是0,虽然都是黑色的。。

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-图像NaN处理相关推荐

  1. OpenCV图像梯度(Sobel和Scharr)

    OpenCV图像梯度(Sobel和Scharr) 1 图像梯度是什么? 2 图像梯度的用途 3 图像梯度的使用 参考 这篇博客将介绍图像渐变以及如何使用OpenCV的cv2.Sobel计算Sobel渐 ...

  2. Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()

    Python,OpenCV图像金字塔cv2.pyrUp, cv2.pyrDown 1. 效果图 2. 原理 2.1 什么是图像金字塔 2.2 金字塔分类 2.3 应用 3. 源码 参考 这篇博客将介绍 ...

  3. OpenCV图像缩放插值之BiCubic双三次插值

    图像缩放算法简介 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值(立体插值),兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中 ...

  4. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...

    原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...

  5. OpenCV 图像加载和显示

    OpenCV 图像加载和显示 OpenCV 图像加载和显示 加载图像(使用cv :: imread) 创建一个名为OpenCV的窗口(使用cv :: namedWindow) 在OpenCV窗口中显示 ...

  6. OpenCV图像坐标系与行列宽高的关系

    这篇文章挺好    OpenCV图像坐标系与行列宽高的关系 图片坐标系,与从小到大见到的xy坐标系,x轴方向相同,只是y轴方向相反.

  7. python使用openCV图像加载(转化为灰度图像)、Canny边缘检测器检测图像的边缘(Detect Edges)

    python使用openCV图像加载(转化为灰度图像).Canny边缘检测器检测图像的边缘(Detect Edges) 目录

  8. python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)

    python使用openCV图像加载(转化为灰度图像).使用filter2D函数对图像进行锐化(Sharpen Images) 目录

  9. python opencv 图像膨胀

    python opencv 图像膨胀 代码: import cv2 import numpy as np # 图像膨胀 def dilate_img(img,a,iterations):kernel ...

  10. python opencv 图像旋转

    python opencv 图像旋转 原图 顺时针旋转 代码: import cv2 path = '2.jpg' img = cv2.imread(path,1) trans_img = cv2.t ...

最新文章

  1. 深度神经网络中的局部响应归一化LRN简介及实现
  2. 刚进美团,就被各种Code Review,真的有必要吗?
  3. 图灵直播——听胡阳老师和大家聊聊《Python Web开发者的破局之道》
  4. HTTP状态码-HTTP Status Code
  5. python 字符串、列表和元祖之间的切换
  6. 2019计算机视觉论文精选速递(2019/1/23-2018/1/28)
  7. php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程
  8. crash recovery mysql_InnoDB crash recovery 完整过程
  9. SpringBoot与Docker集成
  10. enlink请输入正确服务器地址,Enlink
  11. 单实例设计模式的实现
  12. mysql数据类型及语法_mysql8 参考手册--Numeric数据类型语法
  13. 使用Excel函数时,注意函数对于大小写的区分(vlookup函数不区分大小写)
  14. 红帽rhce考试自带补考吗_红帽RHCE认证考试注意事项
  15. listview优化方案
  16. 1496.数括号法求广义表深度
  17. 两个方法教你彻底解决win10系统更新补丁安装失败的问题
  18. 东北工学院 计算机 姚岚,东北的大学最强十校,工科是真强,2所211大学无缘前十...
  19. 文献(8): 单细胞和空间分析揭示FAP+成纤维细胞和SPP1+巨噬细胞在结直肠癌中的相互作用
  20. 无MAC法安装genymotion的解决办法_Invalid reply from server..

热门文章

  1. 原生js替换jQuery各种方法-中文版
  2. 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
  3. C#的变迁史 - C# 4.0 之多线程篇
  4. ACM POJ 2965 The Pilots Brothers' refrigerator
  5. 1337. 矩阵中战斗力最弱的 K 行
  6. 进程的切换和系统的一般执行过程
  7. 分类 迁移学习_迁移学习时间序列分类
  8. Python程序员薪资 你不知道的事
  9. dump的文件 查看pg_【PG备份恢复】pg_dump命令测试
  10. 多个点 最远距离 java_Java实现的计算最大下标距离算法示例