vec3b、vec3f和CV_8UC3、CV_32FC3的含义和掩膜抠图经验

2023-11-27 09:10

本文主要是介绍vec3b、vec3f和CV_8UC3、CV_32FC3的含义和掩膜抠图经验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


 目录

vec3b、vec3f等的含义:

CV_8UC3、CV_32FC3等的含义:

掩膜抠图过程中的坑:


vec3b、vec3f等的含义:

格式:CV_<bit_depth>(S|U|F)C<number_of_channels>

解释:

1--bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对应的就是CV_8
2--S|U|F--S--代表---signed int---有符号整形U--代表--unsigned int--无符号整形F--代表--float---------单精度浮点型
3--C<number_of_channels>----代表---一张图片的通道数,比如:1--灰度图片--grayImg---是--单通道图像2--RGB彩色图像---------是--3通道图像3--带Alph通道的RGB图像--是--4通道图像

CV_8UC3、CV_32FC3等的含义:

Vec的表示 ---- Vec2b,Vec3b,Vec2s,Vec3s
(1)Vec2b—表示每个Vec2b对象中,存储2个char(字符型)数据
typedef Vec Vec2b; 、
(2)Vec3b—表示每一个Vec3b对象中,存储3个char(字符型)数据,比如用这样的对象,去存储RGB图像中的一个像素点
typedef Vec Vec3b;
(3)Vec4b—表示每一个Vec4b对象中,存储4个字符型数据,用这样的类对象去存储—4通道RGB+Alpha的图像中的像素点
typedef Vec Vec4b;
(4)Vec2s—表示这个类的每一个类对象,存储2个short int(短整型)的数据
typedef Vec Vec2s;
typedef Vec Vec3s;
typedef Vec Vec4s;

Vec的表示—Vec3b Vec3f
8U 类型的 RGB 彩色图像可以使用Vec3b
3 通道 float 类型的矩阵可以使用Vec3f
对于 Vec 对象,可以使用 [ ] 符号如操作数组般读写其元素,

Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0] = 255; //0通道的B 分量
color[1] = 0; //1通道的G 分量
color[2] = 0; //2通道的R 分量

掩膜抠图过程中的坑:

imgSamll是我的彩色三通道原图,每个通道的元素值类型是UNIT8的,mask是我准备的掩膜,本来想用mask来把彩色图对应的ROI区域抠出来,没想到最终输出的dst是三通道的“灰色图效果”

后来发现是初始dst的元素值类型为float的和imgSmall不对应导致。

正确抠图方式:

//输出图像分配内存Mat dst = Mat::zeros(imgSmall.size(), CV_8UC3);//掩码Mat mask = imgThresh;//只保留for (int r = 0; r < imgSmall.rows; r++){for (int c = 0; c < imgSmall.cols; c++){if (mask.at<uchar>(r, c) == 255){dst.at<Vec3b>(r, c)[0] = imgSmall.at<Vec3b>(r, c)[0];dst.at<Vec3b>(r, c)[1] = imgSmall.at<Vec3b>(r, c)[1];dst.at<Vec3b>(r, c)[2] = imgSmall.at<Vec3b>(r, c)[2];}}}

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】

这篇关于vec3b、vec3f和CV_8UC3、CV_32FC3的含义和掩膜抠图经验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/427412

相关文章

Linux错误代码及其含义

最近在做工程的时候,程序在崩溃时候弹出了错误号,然后根据错误号搜索错误信息,很快解决之,特此记录。 在程序出错时,我们通过全局变量错误号errno和perror函数能够很快的定位到错误原因。 Linux错误代码及其含义 C NameValueDescription含义Success0Success成功EPERM1Operation not permitted操作不允许ENOENT2No

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信号处理和控制反映了这些方法在工程和临床科学的界面上被使用和发展的主要领域。期刊的范围包括相关的评论论文(review p

经验笔记:NAT穿越技术

NAT穿越技术经验笔记 随着互联网的普及和技术的发展,P2P(Peer to Peer,点对点)通信成为许多应用的核心功能之一。然而,网络地址转换(NAT)设备的存在常常成为实现P2P通信的一个障碍。本文旨在总结NAT穿越技术的基本原理及其配置方法,并探讨如何保障NAT穿越的安全性。 1. NAT穿越技术概述 NAT穿越技术是一种使位于不同NAT网络中的主机能够直接通信的技术。NAT(Net

从零开始学cv-14:图像边缘检测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、图像边缘是什么?二、Sobel 算子三、Scharr 算子四、Prewitt算子五、Canny算子 前言 边缘检测是OpenCV中的一个重要组成部分,它用于识别图像中亮度变化显著的点,即边缘。通过边缘检测,我们可以从图像中提取出重要的特征,为后续的图像分析、形状识别和物体跟踪等任务奠定

经验笔记:SQL调优

SQL调优经验笔记 引言 SQL调优是确保数据库系统高效运行的重要环节。通过对查询语句、数据库配置、硬件资源等方面进行优化,可以显著提升数据库性能,进而增强应用程序的整体表现。以下是基于常见调优手段和实践经验整理的一份经验笔记。 1. 查询语句优化 1.1 避免使用SELECT * 只选择需要的列,减少不必要的数据传输。 示例: -- 不推荐SELECT * FROM users WH

AI时代产品经理面临的变与不变:0经验求职产品经理要注意哪些细节?

AI时代,各种产品形态、业务的变化,让市场也对产品经理提出了新的要求,产品经理要有哪些变与不变呢?现在入行产品经理是好时机么?没有技术背景、没有学历有优势如何入行做产品经理?今天我们一起探讨一下! 产品人究竟需要具备哪些能力?看这个最新的能力模型图就知道了。 随着当前市场的细分,不同行业和领域对产品经理的能力要求已经从单一的具备产品专业能力演变成了兼具产品专业技能+行业/业务知识

从零开始学cv-0:图像处理基础知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一,图像分类1.1、模拟图像1.2、数字图像 二、颜色模式(颜色存储)2.1、RGB模式(发光模式)2.2、CMYK模式2.3、HSB模式2.4、Lab模式2.5、位图模式(Bitmap Mode)2.6、灰度模式(Grayscale Mode)2.7、索引颜色模式(Indexed Color Mode)

兔子-build.gradle中代码的含义

//声明构建的项目类型,这里当然是android了apply plugin: 'com.android.application'//设置编译android项目的参数android {// SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。compileSdkVersion 23//构建工具的版本,其中包括了打包工具aapt、dx等等。// 这个工具的目

安卓错误经验分析之 R cannot be resolved to a variable

当出现 R cannot be resolved to a variable  错误的时候,不能采用编译器建议的修改方法,试着clean一下,然后查找gen文件夹下R.java是否丢失,如果不存在R.java,程序没有报错且采用其它方法均无效,八成是res文件夹下的layout或者manifest出现错误没有显示出来,需要自己查一遍,否则无法根本解决问题,盲目修改代码是没用的。