首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenCV Python :如何在calcHist中使用轮廓作为掩码?

在OpenCV Python中,可以使用轮廓作为掩码来计算图像的直方图。calcHist函数是用于计算直方图的函数,它可以接受一个掩码参数,用于指定计算直方图的区域。

要在calcHist中使用轮廓作为掩码,可以按照以下步骤进行操作:

  1. 首先,使用findContours函数找到图像中的轮廓。findContours函数会返回一个轮廓列表和层次结构。
  2. 创建一个与原始图像大小相同的空白掩码图像,可以使用numpy库中的zeros函数来创建。
  3. 使用drawContours函数将轮廓绘制到掩码图像上。这将在掩码图像上创建一个与轮廓相同形状的白色区域。
  4. 将掩码图像转换为灰度图像,可以使用cvtColor函数将其转换为灰度图像。
  5. 使用calcHist函数计算灰度图像的直方图,同时将掩码图像作为掩码参数传递给函数。

下面是一个示例代码:

代码语言:txt
复制
import cv2
import numpy as np

# 读取图像
image = cv2.imread('image.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用阈值化或其他方法得到二值图像
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 创建掩码图像
mask = np.zeros_like(gray)

# 绘制轮廓到掩码图像上
cv2.drawContours(mask, contours, -1, (255), thickness=cv2.FILLED)

# 计算直方图
hist = cv2.calcHist([gray], [0], mask, [256], [0, 256])

# 打印直方图
print(hist)

在这个示例中,我们首先读取图像并将其转换为灰度图像。然后使用阈值化方法得到二值图像,再通过findContours函数找到图像中的轮廓。接下来,我们创建一个与原始图像大小相同的空白掩码图像,并使用drawContours函数将轮廓绘制到掩码图像上。然后,将掩码图像转换为灰度图像,并使用calcHist函数计算灰度图像的直方图,同时将掩码图像作为掩码参数传递给函数。最后,打印计算得到的直方图。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云图像处理:https://cloud.tencent.com/product/tci
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

十一.灰度直方图概念及OpenCV绘制直方图

一.灰度直方图基本概率 二.绘制直方图 三.使用OpenCV统计绘制直方图 四.总结 文章参考自己以前系列图像处理文章及OpenCV库函数,同时部分参考网易云lilizong老师的视频,推荐大家去学习。...在使用轮廓线确定物体边界时,通过直方图更好的选择边界阈值,进行阈值化处理;对物体与背景有较强对比的景物的分割特别有用;简单物体的面积和综合光密度IOD可以通过图像的直方图求得。 ---- 二....使用OpenCV统计绘制直方图 1.函数原型 前面讲解调用matplotlib库绘制直方图,接下来讲解使用OpenCV统计绘制直方图的例子。...直方图横坐标:图像各个像素点的灰度级 直方图纵坐标:具有该灰度级的像素个数 主要调用函数calcHist()实现: hist = cv2.calcHist(images, channels, mask...Python的图像处理[M].

1.5K20

python opencv】直方图查找、绘制和分析

OpenCV的直方图计算 因此,现在我们使用cv.calcHist()函数查找直方图。...mask:图像掩码。为了找到完整图像的直方图,将其指定为“无”。但是,如果要查找图像特定区域的直方图,则必须为此创建一个掩码图像并将其作为掩码。(我将在后面显示一个示例。)...OpenCV-Python2官方示例已经提供了此功能。检查示例/python/hist.py的代码。 掩码的应用 我们使用了cv.calcHist()来查找整个图像的直方图。...只需创建一个掩码图像,在你要找到直方图为白色,否则黑色。然后把这个作为掩码传递。...# 检查作为掩码的第三个参数 hist_full = cv.calcHist([img],[0],None,[256],[0,256]) hist_mask = cv.calcHist([img],[

1.2K20

一篇文章就梳理清楚了 Python OpenCV 的知识体系

本篇文章目的将为你详细罗列 Python OpenCV 的学习路线与重要知识点。核心分成 24 个小节点,全部掌握,OpenCV 入门阶段就顺利通过了。 1....图像 ROI 与 mask 掩膜 本部分属于 OpenCV 的重点知识,第一个为感兴趣区域 ROI,第二个是 mask 掩膜(掩码)操作 。 学习 ROI 部分时,还可以学习一下图像的深浅拷贝。...霍夫变换 霍夫变换(Hough Transform)是图像处理的一种特征提取技术,该过程在一个参数空间中,通过计算累计结果的局部最大值,得到一个符合该特定形状的集合,作为霍夫变换的结果。...计算直方图用到的函数是 cv2.calcHist()。...轮廓查找与绘制 核心要理解到在 OpenCV ,查找轮廓就像在黑色背景找白色物体。

1.5K30

精通 Python OpenCV4:第二部分

然后,通过创建的掩码调用cv2.calcHist()函数: hist_mask = cv2.calcHist([gray_image], [0], mask, [256], [0, 256]) 在以下屏幕截图中可以看到此脚本的输出...在本章,与轮廓相关的关键点将在以下主题中解决: 轮廓介绍 压缩轮廓 图像的矩 与轮廓有关的更多函数 过滤轮廓 识别轮廓 匹配轮廓 技术要求 技术要求如下: PythonOpenCV 特定于 Python...如果要获得给定轮廓轮廓近似值,应该使用什么函数? 本章所述,可以以更紧凑的方式覆盖contour_functionality.py脚本定义的extreme_points()函数。...如果要使用胡矩不变量作为特征来匹配轮廓,应该使用什么函数?...在第 10 章,“使用 OpenCV 的机器学习”,将向您介绍机器学习的世界,并且您将了解如何在计算机视觉项目中使用机器学习。

2.1K10

【从零学习OpenCV 4】图像直方图绘制

图像直方图简单来说就是统计图像每个灰度值的个数,之后将图像灰度值作为横轴,以灰度值个数或者灰度值所占比率作为纵轴绘制的统计图。...在OpenCV 4只提供了图像直方图的统计函数calcHist(),该函数能够统计出图像每个灰度值的个数,但是对于直方图的绘制需要使用者自行绘制。...我们首先学习统计灰度值数目的函数calcHist()的使用,该函数的原型在代码清单4-1给出。 代码清单4-1 calcHist()函数原型 1....在程序我们首先使用calcHist()函数统计灰度图像里面每个灰度值的数目,之后通过不断绘制矩形的方式实现直方图的绘制。...在程序我们使用OpenCV 4提供的四舍五入的取整函数cvRound(),该函数输入参数为double类型的变量,返回值为对该变量四舍五入后的int型数值。

95920

opencv(4.5.3)-python(二十三)--直方图的寻找、绘制、分析

翻译及二次校对:cvtutorials.com 目标 学习: • 使用OpenCV和Numpy函数寻找直方图 • 使用OpenCV和Matplotlib函数绘制直方图 • 你将看到这些函数:cv.calcHist...OpenCV的直方图计算 所以现在我们使用cv.calcHist()函数来寻找直方图。让我们熟悉一下这个函数和它的参数。...• 方法1:使用Matplotlib的绘图函数 • 方法2:使用OpenCV绘图函数 1....这在OpenCV-Python2官方样本已经有了。请查看样本/python/hist.py的代码。 掩膜的应用 我们用cv.calcHist()来寻找全图的直方图。...如果你想找到图像某些区域的直方图呢?只要在你想找直方图的区域创建一个白色的蒙版图像,其他区域设置为黑色。然后把它作为掩膜传给你。

73520

唉,再再再学一下直方图:直方图反投影

点击上方"蓝色小字"关注我哦 之前写过一篇【opencv】带你再学一遍直方图,里面的内容可以看下图。所以今天还要再再再学一个直方图的API:直方图反投影。 ?...直方图反向投影是干啥的呢,它用于图像分割或在图像查找感兴趣的对象。用什么来查找呢?用直方图。...hranges,Sranges }; int size[] = { 20,32 }; //存放每个维度的直方图的尺寸的数组 int channels[] = {0,1}; //通道数 calcHist...可以大概看出公路的轮廓了吧? 4,上一篇图像腌膜Mask的常规操作你真的信手拈来吗?...介绍了掩码操作,这里我们就要用掩码将公路给抠出来显示: //图像掩码Mask操作 threshold(proImage, proImage, 50, 255, THRESH_BINARY);//

69030

OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用

基于效率考虑,Opencv实现的霍夫变换圆检测是基于图像梯度的实现,分为两步: 检测边缘,发现可能的圆心 基于第一步的基础上从候选圆心开始计算最佳半径大小 c++ HoughCircles( InputArray...int method,//使用的匹配方法 InputArray mask=noArray()//(optional) ) 示例代码 c++ #include<opencv2\opencv.hpp...所以边缘提取的阈值选定会影响最终轮廓发现结果 API介绍 findContours发现轮廓 drawContours绘制轮廓 轮廓发现(find contour) Code 在二值图像上发现轮廓使用API...draw contour) c++ 在二值图像上发现轮廓使用API cv::findContours之后对发现的轮廓数据进行绘制显示 drawContours( InputOutputArray...Point offset=Point()// 轮廓位移,可选 ) 流程 输入图像转为灰度图像cvtColor 使用Canny进行边缘提取,得到二值图像 使用findContours寻找轮廓 使用

2.5K20

OpenCV入门之十】如何计算图像直方图

在我们的示例,dims = 1,因为我们只计算每个像素的强度值(在灰度图像)。 bin:它是每个暗淡的细分数量。 在我们的示例,bin = 16 range:要测量的值的限制。...使用OpenCV函数cv::split。...由于我们正在使用B,G和R平面,我们知道我们的值将在区间[0,255]范围内 int histBins = 256;//建立箱数(5,10 ......)...计算出来的Mat中元素的最大值可能上几千,所以最好归一化后再绘制直方图 //使用OpenCV函数cv::calcHist计算直方图: calcHist(&bgr_planes[0], 1,...-1, // 当为负,输出在大小深度通道数都等于输入,当为正,输出只在深度与输如不同,不同的地方由dtype决定 InputArray mask = noArray() // 掩码

1.2K20

机器学习-09-图像处理02-PIL+numpy+OpenCV实践

开源地理空间基金会中文分会 Pillow (PIL Fork) 10.0.1 文档 python使用opencv对图像添加(高斯/椒盐/泊松/斑点)噪声 【OpenCV实战】简洁易懂的车牌号识别Python...crop()方法可以从一副图像裁剪指定的矩形区域,它接收包含四个元素的元组作为参数, #各元素的值分别对应裁剪区域在原图像的左上角和右下角位置的坐标,坐标系统的原点(0, 0)在图像的左上角: #使用四元组...对于图像的某些特征边缘、轮廓、对比度等,图像增强是进行强调或锐化,以便于显示、观察或进一步分析与处理。图像增强主要是一个主观过程,而图像复原大部分是一个客观过程。...,会让图像变得更加模糊; 2)核必须是大于1的奇数,3、5、7等; 3)在代码 dst = cv2.medianBlur(src, ksize) 填写核大小时,只需填写一个数即可,3、5、7...----calcHist()函数 使用OpenCVcalcHist() 函数 计算B、G、R通道的灰度级并绘制图形 hist = cv2.calcHist(images, channels

17020

opencv(4.5.3)-python(二十五)--二维直方图

已经有一个python样本(samples/python/color_histogram.py)用于寻找颜色直方图。我们将尝试理解如何创建这样的颜色直方图,这对理解直方图反投影等进一步的主题很有用。...OpenCV的二维直方图 它非常简单,使用同一个函数cv.calcHist()来计算。对于颜色直方图,我们需要将图像从BGR转换为HSV。(记住,对于一维直方图,我们从BGR转换为灰度)。)...你可以用任何图像编辑工具GIMP来验证它。...方法3:OpenCV的样本风格 在OpenCV-Python2样本(samples/python/color_histogram.py),有一个颜色直方图的示例代码。...在那段代码,作者用HSV创建了一个颜色图。然后将其转换为BGR。得到的直方图图像与这个颜色图相乘。他还使用了一些预处理步骤来去除孤立的小像素,从而得到了一个好的直方图。

50730

Python3 OpenCV4 计算机视觉学习手册:1~5

OpenCVPython 绑定包装了 C++ 实现,因此,作为 Python 用户,即使我们不直接使用 C++,我们也可以从此更新获得一些性能优势。...pip install opencv-contrib-python-nonfree 如果您打算分发依赖于 OpenCV 的非免费内容的软件,则应自己调查专利和许可问题如何在特定国家和特定用例应用。...pip install opencv-contrib-python-nonfree 如果您打算分发依赖于 OpenCV 的非免费内容的软件,则应自己调查专利和许可问题如何在特定国家和特定用例应用。...技术要求 本章使用 PythonOpenCV 和 NumPy。 作为 OpenCV 的一部分,它使用可选的opencv_contrib模块,其中包括用于人脸识别的功能。...如果未指定掩码,则这些函数将复制或交换矩形的全部内容。 总结 到目前为止,您应该已经对人脸检测和人脸识别如何工作以及如何在 PythonOpenCV 4 实现它们有了很好的了解。

4K20

OpenCV图像处理(十六)---图像直方图

前言 在上一期的文章,我们学习了图像的轮廓特征,主要学习了轮廓检测函数和框选函数。今天,我们将继续学习图像的新知识--直方图。...mask : 掩码图像 统计整幅图像的直方图,设为None。...统计图像某一部分的直方图时,需要掩码图像 histSize : BINS的数量 ranges : 像素值返回RANGE 像素值范围,例如:[0, 255] accumulate : 累计标识 默认值为false.../fig.jpg", cv2.IMREAD_GRAYSCALE) #调用cv2.calcHist()函数绘制直方图 hist = cv2.calcHist([gray_img], [0], None,...结语 今天的文章分享结束了,图像直方图能够让我们直观的看到像素的分布情况,也可以用在精度不是很高的图像识别问题,希望大家下去学会相关函数的使用,实践方知其所以然。

74210

树莓派计算机视觉编程:6~10

作为练习,请尝试使用按钮实现相同的功能,以便有单独的按钮来跟踪蓝色和绿色。 对图像执行变换操作 在本节,我们将学习如何使用 OpenCVPython 3 对图像执行各种数学转换操作。...现在,让我们了解仿射数学变换的概念,并使用 OpenCVPython 3 进行演示。仿射变换是一种几何数学变换,可确保原始输入图像的平行线在输出图像中保持平行。...我们了解并演示了如何在模糊,平滑和消噪图像中使用低通过滤器。 在本章,我们将学习并演示高通过滤器的用法。 这包括它们在图像处理和计算机视觉的应用。...cv2.calcHist()函数接受图像数组,掩码,通道索引,范围和大小作为参数,以为彩色图像的单个通道计算直方图。...此函数接受要显示轮廓的图像数组,使用cv2.findContours()函数检测到的轮廓列表,绘制轮廓的索引(我们必须通过-1作为该参数的自变量,以绘制图像的所有轮廓),轮廓的颜色和厚度作为自变量。

1.2K20

python——opencv入门(一)

1、 OpenCV的结构 和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性。...根据功能和需求的不同,OpenCV的函数接口大体可以分为如下部分: core:核心模块,主要包含了OpenCV中最基本的结构(矩阵,点线和形状等),以及相关的基础运算/操作。...从使用的角度来看,和OpenCV2相比,OpenCV3的主要变化是更多的功能和更细化的模块划分。...2、python——opencv基础 2.1 图像的表示 已知单通道的灰度图像在计算机的表示是一个8位无符号整形的矩阵,在oncv的C++代码,表示图像有专门的结构cv::Mat,但python中有...在OpenCV,仿射变换的矩阵是一个2×3的矩阵,其中左边的2×2子矩阵是线性变换矩阵,右边的2×1的两项是平移项: ?

87740

基于python图像处理API的使用示例

,图像分割,图像去噪,图像加水印以及修复水印等 2.opencv常用的接口 cv.imread() 读取图片,返回numpy cv.imwrite() 写入图片 cv.cvtColor() 图像色彩空间转换...cv.VideoCapture() 视频文件 cv.flip(src,flipcode,dst) 图像翻转 cv.rectangle() 矩形 cv.circle() 圆 cv.ellipse() 椭圆 cv.calcHist...() 计算轮廓曲线的弧长 cv.approxPolyDP() 图像二值图像的每个轮廓,可以使用轮廓逼近,逼近每个轮廓的真实几何形状,从而通过轮廓逼近的输出结果判断一个对象是什么形状 cv.fitEllipse...,形成完整的闭合区域连通组件 顶帽操作有时候对于我们提取图像微小部分特别有用 cv.inpaint() 图像修复 cv.findHomography() cv.warpPerspective() 透视变换...图像处理API的使用示例的文章就介绍到这了,更多相关python 图像处理API内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

1.1K20

万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文

由于Python具有语法清晰、代码友好、易读性好等特点,同时拥有强大的第三方库支持,包括网络爬取、信息传输、数据分析、图像处理、绘图可视化等库函数,该系列文章选择了Python作为图像处理的编程语言。...[Python图像处理] 二十八.OpenCV快速实现人脸检测及视频的人脸 [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作 [Python图像识别] 四十五....阈值化处理可以将图像的像素划分为两类颜色,常见的阈值化算法公式所示: 像阈值化处理threshold()函数不同类型的处理算法如表所示。...图像锐化和边缘提取技术可以消除图像的噪声,提取图像信息中用来表征图像的一些变量,为图像识别提供基础。通常使用灰度差分法对图像的边缘、轮廓进行处理,将其凸显。图像锐化的方法分为高通滤波和空域微分法。...现在,广泛使用机器学习和深度学习的方法来处理图像分类问题,其主要任务是给定一堆输入图片,将其指派到一个已知的混合类别的某个标签。

1.8K10

用于图像处理的Python顶级库 !!

它是用C++编写的,但是开发人员已经提供了Python和java绑定。它易于阅读和使用。 为了建立计算机视觉和机器学习模型,OpenCV有超过2500种算法。...让我们看一些可以使用OpenCV执行的示例: (1)灰度缩放 灰度缩放是一种将3通道图像(RGB、HSV等)转换为单通道图像(即灰度)的方法。最终的图像在全白和全黑之间变化。...Scikit-Image使用Numpy数组作为图像对象。让我们看看如何在scikit图像执行活动轮廓操作。活动轮廓描述图像形状的边界。...Scipy提供了一些基本的图像处理操作,人脸检测、卷积、图像分割、读取图像、特征提取等。 除此之外,还可以执行过滤,在图像上绘制轮廓线。...有关更多信息,请查看官方文档:https://itk.org/ 7、Numpy 它是一个用于数值分析的开放源码python库。它包含一个矩阵和多维数组作为数据结构。

12910
领券