首页 > 其他分享 >掌握图像处理中的颜色识别与形态学变换技术

掌握图像处理中的颜色识别与形态学变换技术

时间:2024-08-13 20:23:07浏览次数:9  
标签:颜色 imshow cv2 形态学 图像处理 图像 img1 识别 255

形态学变换

形态学变换是一种基于形状的图像处理技术,主要应用于二值化图像。它的核心操作包括腐蚀和膨胀,这两者是对立的基本操作。

  • 核(结构化元素):核是一个小的矩阵或模板,用于在图像上进行操作。它定义了进行形态学变换时考虑的邻域范围。

  • 腐蚀(Erosion):腐蚀操作会缩小图像中目标的区域。它通过将核与图像中相应部分的重叠区域进行比较,并将最小值赋给中心像素,从而减少亮区域的大小。

  • 膨胀(Dilation):膨胀操作会扩大图像中目标的区域。它通过将核与图像中相应部分的重叠区域进行比较,并将最大值赋给中心像素,从而增加亮区域的大小。

import cv2
import numpy as np
img=cv2.imread('./src/car.png')
kernel=np.ones((3,3),np.uint8)
#腐蚀(求局部最大)
img1=cv2.erode(img,kernel,iterations=1)
#膨胀(求局部最小)
img2=cv2.dilate(img,kernel,iterations=1)
#开运算(先腐蚀后膨胀)
img3=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#闭运算(先膨胀后腐蚀)
img4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
#礼帽运算(原图像与开运算之差)
img5=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
#黑帽运算(原图像与闭运算之差)
img6=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
#形态学梯度(膨胀图像与腐蚀图像之差)
img7=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
​
cv2.imshow("img",img)
cv2.imshow("img1",img1)
cv2.imshow("img2",img2)
cv2.imshow("img3",img3)
cv2.imshow("img4",img4)
cv2.imshow("img5",img5)
cv2.imshow("img6",img6)
cv2.imshow("img7",img7)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片颜色识别

1.RGB颜色空间

RGB颜色空间是图像处理中最常见的颜色模型,用于表示和显示彩色图像。RGB代表红色(Red)、绿色(Green)和蓝色(Blue),这三种基本颜色通过不同强度的组合可以生成其他颜色。RGB模型广泛应用于电视、电脑显示屏等设备。

RGB颜色模型基于笛卡尔坐标系,其中:

  • 红色、绿色和蓝色分别位于坐标轴的三个角上。

  • 黑色位于原点(0,0,0),白色则位于坐标轴最大值的位置(255,255,255)。

  • RGB颜色空间可以产生大约1600万种颜色,几乎涵盖了所有可见颜色。

在OpenCV中,颜色是以BGR(蓝色、绿色、红色)的方式存储的,因此红色的像素值为(0,0,255),而不是(255,0,0)。

2.颜色加法,颜色加权加法

使用OpenCV的cv.add()函数或简单的NumPy操作(res = img1 + img2)可以将两幅图像相加。两幅图像需要具有相同的大小和类型。

OpenCV的加法操作是饱和加法,即像素值的总和不会超过255。NumPy的加法是模运算,会处理像素值的溢出,表现为图像混合。图像混合的公式为:

( g(x) = (1−α)f0(x) + αf1(x) )

其中,α的值在0到1之间变化,可以控制混合效果。

要将两幅图像以指定权重混合(如第一幅图像权重0.6,第二幅图像权重0.4),可以使用cv2.addWeighted()函数:

( dst = α⋅img1 + β⋅img2 + γ )

在这里,γ通常设为零。

import cv2
import numpy as np
img1=cv2.imread('./src/tu.png')
img2=cv2.imread('./src/cao.png')
t=img1+img2 #直接相加,取余
m=cv2.add(img1,img2) #颜色加法
n=cv2.addWeighted(img1,0.6,img2,0.4,0)#颜色加权加法
cv2.imshow("t",t)
cv2.imshow("m",m)
cv2.imshow("n",n)
cv2.waitKey(0)

 

3.HSV颜色空间

HSV(色调、饱和度、亮度)颜色空间是一种用于描述颜色的模型,常用于图像处理和计算机视觉中。与RGB(红、绿、蓝)模型不同,HSV将颜色分解为三个独立的分量,使得对颜色的调整和操作更加直观和方便。

HSV颜色模型是一种六角锥体模型,如下图所示:

  • 色调(Hue, H):表示颜色的类型或种类,以角度度量,范围通常为0°到360°。在HSV颜色空间中,为了与计算机处理的需要相适应,色调的范围常常被映射到0到180的范围,其中0°代表红色,120°代表绿色,240°代表蓝色,其他颜色位于这些基色之间。例如,黄色是60°,青色是180°,紫色是300°。

  • 饱和度(Saturation, S):表示颜色的纯度或强度,范围通常为0%到100%。饱和度越高,颜色越鲜艳;饱和度为0时,颜色呈现为灰色。HSV中的饱和度范围被映射到0到255之间,其中0代表无色(灰色),255代表纯色。

  • 亮度(Value, V):表示颜色的明亮程度,范围从0%(黑色)到100%(白色)。亮度越高,颜色越亮;亮度为0时,颜色为黑色。HSV中的亮度范围也被映射到0到255之间,其中0代表黑色,255代表最亮的颜色。

在实际应用中,HSV颜色空间可以使得对颜色的调整更加直观,比如在图像处理中,调整色调可以改变图像的色彩,调整饱和度可以改变颜色的鲜艳度,而调整亮度可以改变图像的明暗程度。这种表示方式在处理图像的颜色分离、色彩增强等操作时特别有用。

4.制作掩膜

掩膜(Mask)在图像处理中用于选择性地遮挡或突出图像的特定区域。它通常是一个二值图像,尺寸与原图像相同,其中目标区域标记为1(白色),其余区域标记为0(黑色)。掩膜可以基于HSV颜色范围进行调整,以便对图像的特定颜色区域进行处理或分析。

import  cv2
import numpy as np
img1=cv2.imread("./src/demo.png")
tm=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
low=np.array([26,43,46])
hight=np.array([34,255,255])
mask=cv2.inRange(tm,low,hight) #制作掩膜
cv2.imshow("img1",img1)
cv2.imshow("mask",mask)
cv2.waitKey(0)

与运算、图片颜色替换

在图像处理中,“与”运算用于对图像的像素值进行操作。具体而言,它将两个图像中对应的像素值进行“与”运算,生成一个新图像。掩膜(Mask)是一种常见的操作工具,通常是一个二值图像,与原图像尺寸相同,其中目标区域标记为1(白色),其他区域标记为0(黑色)。在处理图像时,可以通过掩膜选择性地修改图像的部分区域。例如,如果掩膜中白色区域表示需要处理的部分,我们可以用它来对原图像中的这些区域进行像素值的修改,从而实现颜色的替换或其他操作。

import  cv2
import numpy as np
img1=cv2.imread("./src/demo.png")
hsv=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
low=np.array([26,43,46])
hight=np.array([34,255,255])
mask=cv2.inRange(hsv,low,hight)  #制作掩膜
cl=cv2.bitwise_and(img1,img1,mask=mask) #与运算
img1[mask==255]=(0,255,0) #颜色替换
cv2.imshow("img1",img1)
cv2.imshow("mask",mask)
cv2.imshow("cl",cl)
cv2.waitKey(0)

ROI切割

ROI(Region of Interest)是图像处理中的一个重要概念,它指的是我们关注的图像区域。例如,如果我们要检测眼睛,通常只关心脸部区域,因此可以将脸部提取出来,以减少计算量并提高效率。

在使用OpenCV读取图像时,图像数据会被存储为Numpy数组,其中图像的高度、宽度和颜色通道分别对应数组的第一个、第二和第三维度。通过Numpy的切片操作,我们可以指定要提取的ROI区域的坐标,从而仅获取感兴趣区域的像素值。这种方法可以显著减少数据处理和存储的负担。

import cv2
img=cv2.imread("./src/b.png")
img2=img[130:220,100:224]
cv2.imshow("img",img)
cv2.imshow("img2",img2)
cv2.waitKey(0)

 

添加水印

添加水印通常涉及将一个图像(水印)叠加到另一张图像上。以下是一个使用OpenCV和Numpy在Python中添加水印的简单示例:

import cv2
import numpy as np
img=cv2.imread("./src/cat.png")
logo=cv2.imread("./src/logohq.png")
​
# 获取 logo 的尺寸
h, w, _ = logo.shape
# 将 logo 转换到 HSV 颜色空间
hsvlogo = cv2.cvtColor(logo, cv2.COLOR_BGR2HSV)
#提取红色范围
lower1 = np.array([0, 43, 46])
upper1 = np.array([10, 255, 255])
#提取灰色范围
lower2 = np.array([0, 0, 46])
upper2= np.array([180, 43, 220])
# 创建掩膜
mask1 = cv2.inRange(hsvlogo, lower1, upper1)
mask2 = cv2.inRange(hsvlogo, lower2, upper2)
mask3=mask1+mask2
#膨胀操作
kernel = np.ones((3,3), np.uint8)
mask=cv2.dilate(mask3,kernel,iterations=1)
# 显示掩膜
cv2.imshow("mask", mask)
# 提取与 logo 大小相同的背景区域
img2 = img[:h, :w]
# 使用掩膜提取文字区域
text_bool = (mask == 255)
# 将文字部分融合到背景图像中
img2[text_bool] = logo[text_bool]
cv2.imshow("img", img)
cv2.imshow("logo", logo)
cv2.waitKey(0)

 

标签:颜色,imshow,cv2,形态学,图像处理,图像,img1,识别,255
From: https://blog.csdn.net/2401_83649983/article/details/141172721

相关文章

  • 用户识别规则
    小结:1、用户属性是用户具有节点意义的属性,不建议在短时间内进行频繁修改,对于需要频繁变更的属性,建议放在事件中作为事件属性用户识别规则|ThinkingDatahttps://docs.thinkingdata.cn/ta-manual/latest/installation/pre_installation/user_identify.html#%E4%BA%94%E3%80%81%......
  • 猪脸识别、自动投喂!Apache DolphinScheduler还能做这些?
    数字化转型提速中!传统农牧食品行业也寻求搭上数字化转型的快车,通过物联网、大数据、人工智能等现代信息技术,实现生产、加工、流通等环节的智能化和自动化,提高生产效率、优化资源配置、提升产品质量,并满足消费者对食品安全和可追溯性的需求。在数字化浪潮的推动下,铁骑力士集团作......
  • 人工智能算法,图像识别技术;基于大语言模型的跨境商品识别与问答系统;图像识别
    目录一.研究背景二,大语言模型介绍三,数据采集与预处理 商品识别算法四. 跨境商品问答系统设计五.需要源码联系一.研究背景 在当今全球化的背景下,跨境电商行业迅速发展,为消费者提供了更广泛的购物选择和更便利的购物方式。然而,随着跨境电商平台上商品种类的不断......
  • 京东旋转验证码识别代码
    京东旋转验证码样例如下:现在京东更新了很多新图片,我们再次进行了大量数据标记,完成了这款验证码的更新。现在正确率可以达到95%左右。下边是这款验证码的识别代码:importbase64importrequestsimportdatetimeimportnumpyasnpfromioimportBytesIOfromPILimpo......
  • Halcon颜色识别
     本文接扫halcon识别排序颜色,复杂点在于无法使用单一图像区域识别出5中颜色。这里用到了ImageR和ImageS*颜色识别*定义颜色类型FushColor:=['black','brown','red','pink','yellow']*颜色对应灰度值HueRange:=[10,51,68,100,145,191,\0,10,30,50]......
  • 关于小程序使用OCR进行身份证识别
    1.第三方插件安装 2.搜索并安装 3.购买免费次数1天100次  https://fuwu.weixin.qq.com/service/detail/000ce4cec24ca026d37900ed551415 4.选中使用的账号 5.支付完成愉快使用 6.正式使用  文档位置:https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx44......
  • [图文直播]使用EasyOCR识别图片上的文字
    安装EasyOCRC:\Users\Administrator>pipinstalleasyocrCollectingeasyocrDownloadingeasyocr-1.7.1-py3-none-any.whl.metadata(11kB)Collectingtorch(fromeasyocr)Downloadingtorch-2.4.0-cp312-cp312-win_amd64.whl.metadata(27kB)Collectingtor......
  • 【嵌入式linux开发】旭日x3派部署自己训练的yolov5模型(安全帽识别、视频流推理、yolov
    旭日x3派部署自己训练的模型(安全帽识别、视频流推理、yolov5-6.2)windows,框架pytorch,python3.7效果模型训练模型转换1、pt模型文件转onnx2、检查onnx模型3、准备校准数据4、onnx转bin上板视频流推理1、图片推理2、视频流推理效果模型训练进官网可克隆yolov5......
  • Python deepface:让你的代码轻松地实现人脸识别功能
    楔子在GitHub上面发现了一个非常有趣的库,叫deepface,简直是人间宝藏。这个库主要是做人脸识别和面部属性分析的,它集合了目前全球最顶尖的开源人脸识别算法,使用卷积神经网络(CNN)对图像进行特征提取,以实现高精度的人脸识别。实验表明,人类在面部识别任务上的准确率为97.53%,而这些......
  • 翔云PHP身份证识别接口集成示例-护照识别-港澳台通行证识别
    证件识别接口简介:证件识别接口一般是指针对各类证件进行识别,其中包含但不限于身份证识别、护照识别、港澳台通行证识别、户口页识别、驾驶证识别、行驶证识别、台湾健保卡等,其​多应用于需要进行实名认证与证件信息登记的场景。证件身份证识别接口返回结果示例如下:证件识别接......