Python----计算机视觉处理(Opencv:图像颜色替换)

news/2025/3/19 20:09:51/

一、开运算

       开运算就是对图像先进行腐蚀操作, 然后进行膨胀操作。开运算可以去除二值化图中的小的噪点,并分离相连的物体。

         其主要目的就是消除那些小白点

在开运算组件中,有一个叫做kernel的参数,指的是核的大小,通常为3x3、5x5、7x7 

二、制作掩膜

        掩膜(Mask)是一种在图像处理中常见的操作,它用于选择性地遮挡图像的某些部分,以实现特定任务 的目标。掩膜通常是一个二值化图像,并且与原图像的大小相同,其中目标区域被设置为1(或白色), 而其他区域被设置为0(或黑色),并且目标区域则可以根据HSV的颜色范围进行修改,如下图所示,可 以选择制作不同颜色的掩膜:

三、颜色替换

        由于掩膜与原图的大小相同,并且像素位置一一对应,那么我们就可以得到掩膜中白色(也就是像素值 为255)区域的坐标,并将其带入到原图像中,即可得到原图中的红色区域的坐标,然后就可以修改像 素值了,这样就完成了颜色的替换。

 

 导入模块

python">import cv2
import numpy as np

输入图像

python">img=cv2.imread('red_green_blue_yello.png')

GBR到HSV转换

python">img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

创造掩膜

python">lowerb=np.array([0,43,46])
upperb=np.array([10,255,255])
img_mask=cv2.inRange(img_hsv,lowerb,upperb)

构建核

python">kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))

开运算

python">img_open=cv2.morphologyEx(img_mask,cv2.MORPH_OPEN,kernel)

 颜色替换

python">for i in range(img_open.shape[0]):for j in range(img_open.shape[1]):if img_open[i,j]==255:img[i,j]=(255,0,0)

 或

python">img[img_open==255]=(255,0,0)

 输出图像

python">cv2.imshow('img',img)
cv2.waitKey(0)

完整代码

python">import cv2  # 导入OpenCV库  
import numpy as np  # 导入NumPy库,用于数组处理  # 读取图像  
img = cv2.imread('red_green_blue_yello.png')  # 将BGR图像转换为HSV颜色空间  
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 定义HSV颜色空间的阈值范围,以识别特定颜色(例如,红色)  
lowerb = np.array([0, 43, 46])  # HSV下界  
upperb = np.array([10, 255, 255])  # HSV上界  # 创建掩膜,提取在指定HSV范围内的颜色区域  
img_mask = cv2.inRange(img_hsv, lowerb, upperb)  # 创建一个3x3的矩形结构元素(用于形态学操作)  
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 对掩膜进行开运算,去除小噪声  
img_open = cv2.morphologyEx(img_mask, cv2.MORPH_OPEN, kernel)  # for i in range(img_open.shape[0]):
#     for j in range(img_open.shape[1]):
#         if img_open[i,j]==255:
#             img[i,j]=(255,0,0)# 将开运算后掩膜中白色区域对应的原图像区域更改为蓝色  
# img[i,j]=(255,0,0) 是将白色区域设置为蓝色 (OpenCV中的BGR格式)  
img[img_open == 255] = (255, 0, 0)  # 显示处理后的图像  
cv2.imshow('img', img)  # 等待用户按键后关闭窗口  
cv2.waitKey(0)  

四、库函数 

morphologyEx()

python">cv.morphologyEx(	src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	) ->	dst
方法描述
src源图像。通道数可以是任意的。深度应为 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F 之一。
dst与源图像大小和类型相同的目标图像。
op形态作的类型请参见 MorphTypes
kernelStructuring 元素。可以使用 getStructuringElement 创建它。
anchor内核的锚点位置。负值表示锚点位于内核中心。
iterations应用侵蚀和扩张的次数。
borderType像素外插方法,请参阅 BorderTypes。不支持BORDER_WRAP。
borderValueborder 值(如果边界为常量)。默认值具有特殊含义。
MORPH_ERODE
Python:cv.MORPH_ERODE
腐蚀
MORPH_DILATE
Python:cv.MORPH_DILATE
膨胀
MORPH_OPEN
Python:cv.MORPH_OPEN

开运算,先腐蚀后膨胀

MORPH_CLOSE
Python:cv.MORPH_CLOSE

闭运算,先膨胀后腐蚀

MORPH_GRADIENT
Python:cv.MORPH_GRADIENT

膨胀-腐蚀

MORPH_TOPHAT
Python:cv.MORPH_TOPHAT

原图像-开运算

MORPH_BLACKHAT
Python:cv.MORPH_BLACKHAT

闭运算-原图像

MORPH_HITMISS
Python:cv.MORPH_HITMISS

“hit or miss” .- 仅支持 CV_8UC1 二进制图像。可以在文档中找到教程


http://www.ppmy.cn/news/1580406.html

相关文章

LeetCode56☞合并区间

关联LeetCode题号56 本题特点 贪心 本题思路 将二维数组排序按照左边界排序。排序后,右边界的大小成为找到局部最大值的关键。由题意合并区间可知,应该取数组的’并集‘,局部最优解推出全局最优解,每次找到局部最大的范围&am…

【软件工程】03_软件需求分析

3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行…

Matlab 汽车二自由度转弯模型

1、内容简介 Matlab 187-汽车二自由度转弯模型 可以交流、咨询、答疑 2、内容说明 略 摘 要 本文前一部分提出了侧偏角和横摆角速度作为参数。描述了车辆运动的运动状态,其中文中使用的参考模型是二自由度汽车模型。汽车速度被认为是建立基于H.B.Pacejka的轮胎模…

UE5与U3D引擎对比分析

Unreal Engine 5(UE5)和Unity 3D(U3D)是两款主流的游戏引擎,适用于不同类型的项目开发。以下是它们的主要区别,分点整理: 1. 核心定位 UE5: 主打3A级高画质项目(如主机/P…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型语言模型的训练后优化综述——第8部分——数据

8 数据集 后训练技术被精心设计以提高LLMs对特定领域或任务的适应性,而数据集则是这一优化过程的基石。对先前研究[457, 82]的仔细审查强调了数据的质量、多样性和相关性如何深刻影响模型的有效性,并经常决定后训练努力的成功与否。为了阐明数据集在此背…

leetcode 75.颜色分类(荷兰国旗问题)

题目描述 题目分析 本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。 要想单独解决这道题本身还是很简单的,统计0、1、2的数量然后按顺序赋值,或者手写一个冒泡排序,whatever。 但是在这一题中我们主…

台式机电脑组装---电源

台式机电脑组装—电源 22 33 主板供电是聚集了12V,5V,3.3V的24pin CPU供电的话主要是12V的44pin供电 44pin合并之后,就是8pin 55 SATA硬盘会使用饼io口取电,从电源获取12v,5v,3.3v的电 33

3--网络安全架构概述

从青铜到王者:华为网络安全架构全景解读 前言:黑客都开始内卷了,你的网络安全还在裸奔吗? “从前黑客攻击是为了炫技,现在攻击是为了还房贷” —— 某不愿透露姓名的白帽子 当网络攻击从"技术宅的恶作剧"变…