OpenCV-图像NaN处理
作者:翟天保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;
}
测试效果
![](/assets/blank.gif)
![](/assets/blank.gif)
注意:处理后的数据是NaN值而不是0,虽然都是黑色的。。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
OpenCV-图像NaN处理相关推荐
- OpenCV图像梯度(Sobel和Scharr)
OpenCV图像梯度(Sobel和Scharr) 1 图像梯度是什么? 2 图像梯度的用途 3 图像梯度的使用 参考 这篇博客将介绍图像渐变以及如何使用OpenCV的cv2.Sobel计算Sobel渐 ...
- Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()
Python,OpenCV图像金字塔cv2.pyrUp, cv2.pyrDown 1. 效果图 2. 原理 2.1 什么是图像金字塔 2.2 金字塔分类 2.3 应用 3. 源码 参考 这篇博客将介绍 ...
- OpenCV图像缩放插值之BiCubic双三次插值
图像缩放算法简介 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值(立体插值),兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中 ...
- python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...
原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...
- OpenCV 图像加载和显示
OpenCV 图像加载和显示 OpenCV 图像加载和显示 加载图像(使用cv :: imread) 创建一个名为OpenCV的窗口(使用cv :: namedWindow) 在OpenCV窗口中显示 ...
- OpenCV图像坐标系与行列宽高的关系
这篇文章挺好 OpenCV图像坐标系与行列宽高的关系 图片坐标系,与从小到大见到的xy坐标系,x轴方向相同,只是y轴方向相反.
- python使用openCV图像加载(转化为灰度图像)、Canny边缘检测器检测图像的边缘(Detect Edges)
python使用openCV图像加载(转化为灰度图像).Canny边缘检测器检测图像的边缘(Detect Edges) 目录
- python使用openCV图像加载(转化为灰度图像)、使用filter2D函数对图像进行锐化(Sharpen Images)
python使用openCV图像加载(转化为灰度图像).使用filter2D函数对图像进行锐化(Sharpen Images) 目录
- python opencv 图像膨胀
python opencv 图像膨胀 代码: import cv2 import numpy as np # 图像膨胀 def dilate_img(img,a,iterations):kernel ...
- python opencv 图像旋转
python opencv 图像旋转 原图 顺时针旋转 代码: import cv2 path = '2.jpg' img = cv2.imread(path,1) trans_img = cv2.t ...
最新文章
- 深度神经网络中的局部响应归一化LRN简介及实现
- 刚进美团,就被各种Code Review,真的有必要吗?
- 图灵直播——听胡阳老师和大家聊聊《Python Web开发者的破局之道》
- HTTP状态码-HTTP Status Code
- python 字符串、列表和元祖之间的切换
- 2019计算机视觉论文精选速递(2019/1/23-2018/1/28)
- php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程
- crash recovery mysql_InnoDB crash recovery 完整过程
- SpringBoot与Docker集成
- enlink请输入正确服务器地址,Enlink
- 单实例设计模式的实现
- mysql数据类型及语法_mysql8 参考手册--Numeric数据类型语法
- 使用Excel函数时,注意函数对于大小写的区分(vlookup函数不区分大小写)
- 红帽rhce考试自带补考吗_红帽RHCE认证考试注意事项
- listview优化方案
- 1496.数括号法求广义表深度
- 两个方法教你彻底解决win10系统更新补丁安装失败的问题
- 东北工学院 计算机 姚岚,东北的大学最强十校,工科是真强,2所211大学无缘前十...
- 文献(8): 单细胞和空间分析揭示FAP+成纤维细胞和SPP1+巨噬细胞在结直肠癌中的相互作用
- 无MAC法安装genymotion的解决办法_Invalid reply from server..
热门文章
- 原生js替换jQuery各种方法-中文版
- 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
- C#的变迁史 - C# 4.0 之多线程篇
- ACM POJ 2965 The Pilots Brothers' refrigerator
- 1337. 矩阵中战斗力最弱的 K 行
- 进程的切换和系统的一般执行过程
- 分类 迁移学习_迁移学习时间序列分类
- Python程序员薪资 你不知道的事
- dump的文件 查看pg_【PG备份恢复】pg_dump命令测试
- 多个点 最远距离 java_Java实现的计算最大下标距离算法示例