dem是什么| lps医学上是什么意思| 严重贫血的人吃什么补血最快| 崩溃是什么意思| 5月24日什么星座| 尿素高吃什么药| 大象吃什么食物| 男士内裤买什么牌子好| 施华洛世奇水晶是什么材质| 禅心是什么意思| 准备的近义词是什么| 什么是慢性病| 干咳吃什么药效果好| 鬼死了叫什么| 结余是什么意思| 今年17岁属什么| 破伤风什么时候打最好| 水乳什么牌子好用| 桃子不能和什么水果一起吃| 安宫牛黄丸适合什么人群吃| 精神小伙是什么意思| 为什么会抑郁| 胡麻油是什么油| 脚上长水泡是什么原因| 大葱喜欢什么肥料| 棕色裤子配什么颜色上衣| 男命正官代表什么| 白头发多吃什么食物能变黑| 什么的去路| 不作为什么意思| 电波系是什么意思| 磨牙是什么原因怎么治疗| 什么水果最有营养| 安乃近是什么药| 果断是什么意思| 女性支原体阳性是什么意思| 往返是什么意思| 什么叫执行力| 淡然自若的意思是什么| 疣体是什么| 韭菜可以炒什么| 79年属什么生肖| 助产专业是干什么的| 产妇喝什么汤下奶最快最多| 蜂蜜什么时间喝最好| 跟班是什么意思| 条索灶是什么意思| 共济失调是什么意思| 大惊小怪是什么意思| 阴盛格阳是什么意思| 9月份什么星座| 脚踝扭伤挂什么科| 平躺就咳嗽是什么原因| 节气是什么意思| 硒是什么意思| 人棉是什么面料| 芍药什么时候开花| 农夫与蛇是什么故事| 吃什么能长高| 阉人什么意思| 32年婚姻是什么婚| 献血后吃什么补血最快| 黄瓜和什么一起炒好吃| alp是什么意思| 过生日送什么礼物好| 花生为什么叫落花生| 不能喝酒是什么原因| 那的反义词是什么| 恚是什么意思| 掉头发补充什么维生素| 大什么一什么| 10月21号是什么星座| 什么是苔藓皮肤病| 郑州有什么好玩的景点| 夏天喝什么饮料好| 带状疱疹后遗神经痛用什么药| 缺陷是什么意思| 一直很困想睡觉是什么原因| ssr是什么| 什么是精神出轨| 膝盖不好的人适合什么运动| 收口是什么意思| 长江后浪推前浪是什么意思| 海蜇长什么样| 血压偏低是什么原因| 祭日是什么意思| 龙和什么生肖相冲| 985大学是什么意思| b型血和ab型血的孩子是什么血型| piv是什么病毒| 尿酸高吃什么食物好| 接吻是什么样的感觉| 牛黄安宫丸治什么病| kitty是什么意思| 欧多桑是什么意思| 诺氟沙星胶囊治什么病| idc是什么意思| 连锁反应是什么意思| 郴州有什么好玩的景点| 下家是什么意思| 生理曲度变直什么意思| 梦见什么是怀孕的征兆| 无纺布是什么材料做的| 水蛭是什么动物| 八面玲珑是什么数字| 感想是什么意思| 北京为什么是首都| 为什么会得偏头痛| 马太效应是什么意思| 今年53岁属什么生肖| 坐月子能吃什么零食| 街道办事处属于什么单位| 时间的定义是什么| 足是什么结构| 什么天揽月| 怀孕尿液是什么颜色| 扫把星代表什么生肖| 钙化积分是什么意思| 粉尘作业时必须佩戴什么口罩| 迎风流泪是什么原因| 血液生化检查能看出什么病| 脾阴虚吃什么中成药| 手掌有痣代表什么| 吴亦凡为什么叫牛| cc什么意思| abc是什么药| 紫外线过敏什么症状| 堪忧是什么意思| 公鸡蛋是什么| 什么无什么事| 吐痰带血是什么原因| 梦到好多蛇是什么意思| 看十全十美是什么生肖| 尿素偏高是什么原因| 豆干炒什么好吃| 运动裤配什么上衣好看| 坐月子什么意思| 亥时是什么时候| 双鱼座的幸运色是什么| 特需门诊和专家门诊有什么区别| 七月份吃什么水果| 面部痒是什么原因| 为什么总是梦见一个人| 神经梅毒有什么症状| 反胃恶心想吐吃什么药| 阴阳两虚用什么药| 什么像什么比喻句| 火车为什么会晚点| 破财免灾什么意思| 组织委员的职责是什么| 123是什么意思| 人为什么会困| 6代表什么| 溃疡是什么意思| 吃什么可以排出霉菌| 宫颈多发纳囊什么意思| 吃生姜对身体有什么好处和坏处| 男人到了什么年龄就性功能下降| 血糖高要注意什么| 裸婚什么意思| 甲状腺囊实性结节是什么意思| 双手脱皮是什么原因引起的| 自负是什么意思| 长期玩手机会得什么病| 眼睛红是什么病| 促排药什么时候开始吃| 孕妇肚子疼是什么原因| 吃什么容易排大便| 癫痫属于什么科| 扁桃体发炎是什么引起的| 润滑油是干什么用的| 珍珠是什么做的| 红细胞计数偏高是什么意思| 1是什么| 维生素b6主治什么病| 动脉硬化是什么症状| 弱视和近视有什么区别| 舒肝健胃丸治什么病| 拔气罐有什么好处| 衔接是什么意思| 布洛芬属于什么类药物| 什么能让虱子卵脱落| 蝙蝠飞进家里预示什么| 1964年是什么年| 叶酸基因检测是什么| 为什么会黄体功能不足| 屁多什么原因| 经常抽筋是什么原因| 三是什么意思| 人为什么会打嗝| 农历十月是什么月| 忌诸事不宜什么意思| 噬血细胞综合征是什么病| 湿厕纸是干什么用的| 阴蒂痒是什么原因| 什么叫浪漫| 副脾是什么意思| 30岁属什么| hpv什么时候检查最好| 月痨病是什么病| 乙基麦芽酚是什么| 为什么说婴儿摔床没事| 稳重什么意思| 居士是什么意思| 木字旁有什么字| 跳蚤什么样| 老花眼是什么原因引起的| 舌头尖发麻是什么原因| 专技十三级是什么意思| 叉烧是什么意思| 豆蔻年华是什么意思| 土色是什么颜色的图片| 中国第五大发明是什么| 手不自主颤抖是什么病| 孕妇用什么驱蚊最安全| 九锡是什么意思| 鸡属相和什么属相最配| 双肾尿盐结晶是什么| 福祸相依什么意思| 拉肚子可以吃什么药| 无花果和什么煲汤好| 3月27日什么星座| 胃部检查除了胃镜还有什么方法| 梦见找对象是什么意思| 疣是什么东西| 强扭的瓜不甜什么意思| 做梦大便是什么意思| 碳酸钙是什么东西| 轧戏什么意思| 意难平什么意思| 孙俪什么学历| bench是什么牌子| 偶发房性早搏是什么意思| 四月二十是什么星座| cd8高是什么原因| 笑话是什么意思| 消石灰是什么| 老人脚肿是什么征兆| 鞠躬是什么意思| 犹太人为什么聪明| 下压高是什么原因引起的| 为什么会一直放屁| 征候是什么意思| ly是什么意思| 不干胶是什么| 人经常放屁是什么原因| 尿白细胞加减什么意思| 一阴一阳是什么生肖| 铁棍山药和普通山药有什么区别| 荞麦长什么样子图片| 男人身体怕冷是什么原因如何调理| 排卵期同房要注意什么| 生酮是什么| 稳是什么意思| msi是什么意思| 轻描淡写是什么意思| 儿童诺如病毒吃什么药| 竖小拇指什么意思| beyond什么意思| 长江后浪推前浪是什么意思| 外阴痒用什么药膏| 人老放屁是什么原因| 七月十四日是什么节日| 尽善尽美是什么生肖| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 企业专区 ? OpenVINO生态社区 ? 【原创】OpenCV+Python之图像的基本操作(十)

共1条 1/1 1 跳转至

【原创】OpenCV+Python之图像的基本操作(十)

高工
2025-08-04 10:27:02     打赏
百度 诺兰博士说。

图像的基本操作

在上个教程中,我们介绍了使用鼠标画笔的功能。本次教程,我们将要谈及OpenCV图像处理的基本操作。

本教程我们需要介绍的是:

· 查看图像的像素值并修改它们

· 查看图像属性

· 查看感兴趣区域(ROI

· 分割并合并图像

本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关。要使用OpenCV编写更好的优化代码,需要Numpy的丰富知识。

查看和修改像素值

我们要想查看一幅图像中某一个像素点的像素值,首先需要进行定位,将其坐标标定,我们先来看一个彩色图像(仍然是我们的猫咪,本次教程它是我们的主角):

                   image.png                            

现在我想查看某一个坐标的像素值,我们在pycharm中输入代码:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
#获取像素值
px = img[200,200]
print(px)

代码为查看图像坐标(200200)处的像素值,我们来看结果:

image.png

在之前的教程中我们谈到,OpenCV对于图像的读取并非是RGB通道,而是BGR通道,那么程序输出的[178189186]则分别对应于BGR的像素,我们可以进行验证:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
#获取像素值
px = img[200,200]
B = img[200,200,0]
G = img[200,200,1]
R = img[200,200,2]
print(px,B,G,R)

image.png

现在我们假设,如果图像并非彩色,而是黑白的灰度图像,那么将会怎么输出?先进行实验:

image.png

我们仍然用刚刚的代码进行实验(前提是图像已经灰度化处理,这在后面会讲到)效果:

image.png

可以看到,BGR的像素一致,我们得出一个结论:对于灰度图像,其输出的像素值本质上为它的亮度强度值,值的范围为0-255之间,当为0时,则全部为黑色,相反则为白色。

接下来我们来修改像素值,将指定坐标的像素值用一个数组进行赋值:

import cv2
import numpy as np

img = cv2.imread("cat1.jpg")
#获取像素值
px = img[200,200]
print(px)
img[200,200] = [225,225,225]
print(img[200,200])

查看输出:

image.png

可以看到,初始像素值跟修改之后的像素值。

一般来说,数组通常选择的是某一片区域,比如头几行或者最后几列。而对于某个像素点的访问,Numpy数组方法,array.item() array.itemset()有着更好的作用。但是它返回的是一个标量。所以如果我们想访问所有的B, G, R值,就需要分开调用array.item(),我们来看代码(仍然以坐标200200为例):

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
#获取像素值
px = img[200,200]
print(px)
print(img.item(200,200,0))

我们用item输出像素的B值,也就是蓝色像素的数值:

image.png

实验可以看到,跟之前的效果是一样的。

对于指定坐标的赋值,我们使用itemset函数可以精确到某个像素,比如现在我只对蓝色像素的数值进行改变:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
#获取像素值
px = img[200,200]
print(px)
print(img.item(200,200,0))
img.itemset((200,200,0),100)
print(img.item(200,200,0))

image.png

 可以看到,对于指定的颜色通道的赋值时完全可以的。

查看图像属性

现在将要对图像的各个属性进行研究,图像属性包括行数,列数和通道数;图像数据类型;像素数;等等。

对于一个图像,我们使用shape可以返回行数、列数以及颜色通道的元数:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
print(img.shape)

image.png

输出的第三个数值代表的是图像的BGR三个通道的元数,也就是3。现在我们使用灰度图像做实验:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(img.shape)

灰度图像在之后的教程中会进行讲解,这里先用做实验:

image.png

可以看到,如果图像是灰度的,则返回的元组仅包含行数和列数,因此这是检查加载的图像是灰度还是彩色的好方法。

通过size可以返回当前图像的所有的像素点的总数:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
print(img.size)

image.png

图像的数据类型可以通过dtype获得:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
print(img.dtype)

image.png

imread函数默认读取图像的格式就是uint8,所以返回的全部都是这个格式。在以后我们学习深度学习框架时会发现,uint8的图像数据格式用来进行模型训练时,做数据归一化(预处理阶段)会导致精度缺失,最后导致分割精度下降。当然这是后话,我们现在不提。

如果我们想修改图像的格式,我们需要用到astype函数,现在将图像修改为float32格式的(这种格式的图像被广泛的应用于深度学习的模型训练):

import cv2
import numpy as np

img = cv2.imread("cat.jpg").astype(np.float32)
print(img.dtype)

image.png

dtype在调试时非常重要,因为OpenCV-Python代码中的大量错误是由无效的数据类型引起的,我们在以后的学习中会经常遇到这些问题。

图像ROI

对于图像中的特定区域的选取我们称之为ROI,其实际上就是对图像的xy坐标进行操作,我们来看示例:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
husky = img[1:240,60:270]
cv2.imshow("img",husky)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

本质相当于截取某一部分图片,现在我们来做一些有意思的操作,将截取部分覆盖到图像的其他地方,本质相当于前面讲过的像素修改:

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
husky = img[1:240,60:270]
img[61:300,270:480] = husky
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

分割和合并图像通道

有时我们需要在BGR通道图像上单独进行操作。 在这种情况下,需要将BGR图像分割为单个通道。需要使用split函数与merge函数,它们的作用分别为分离和合并:

b,g,r = cv2.split(img) #拆分图像通道

img = cv2.merge((b,g,r))

此操作可以将BGR三通道分离出来,从而可以对某一通道进行操作,比如现在我们将R像素全部设置为0

import cv2
import numpy as np

img = cv2.imread("cat.jpg")
b,g,r = cv2.split(img) #拆分图像通道
img[:,:,2] = 0
r = img[:,:,2]
img = cv2.merge((b,g,r))
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

r则为R通道,看效果:

image.png

将红色通道去除后,我们的猫咪变的有点绿了。当然,大家还可以进行其他的通道的实验。

图像边框填充

如果要在图像周围创建边框(如相框),则可以使用函数cv2.copyMakeBorder()。它在卷积运算(很重要),零填充等方面有更多应用。此函数采用以下参数:

cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])

· src - 输入图像

· topbottomleftright - 相应方向上像素数的边框宽度

· value : cv2.BORDER_CONSTANT,cv2.BORDER_REFLECT,cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT ,cv2.BORDER_REPLICATE,cv2.BORDER_WRAP

· image.png

cv2.BORDER_REFLECT_101cv2.BORDER_DEFAULT - 与上面相同,但略有改动,如下所示:gfedcb | abcdefgh | gfedcba

cv.BORDER_REPLICATE - 最后一个像素在整个过程中被复制,像:aaaaaa |abcdefgh|hhhhhhh这样

cv.BORDER_WRAP - 对称方向 像素互换 就像: cdefgh|abcdefgh|abcdefg 这样。

我们来看代码:

import cv2
from matplotlib import pyplot as plt

BLUE = [255,0,0]

img1 = cv2.imread('cat.jpg')

replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)

plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')

plt.show()

实验效果:

image.png

对于五个参数都进行了实验,可以看到明显的不同,当然,在这里为了方便图片对比显示,我们使用了matplotlib库,不过这属于python的知识,在这里就不一一介绍讲解了,大家也可以修改代码用OpenCV进行其他参数输出。

 


对计算机视觉感兴趣?这个社区推荐给你~

>>点击了解OpenVINO生态开发社区



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
cph是什么意思 荷花鱼是什么鱼 黑户是什么意思 万事大吉是什么意思 菜花炒什么好吃
什么叫丁克 甲亢吃什么好的更快 tia是什么 什么是性高潮 夹不住尿是什么原因
橡皮泥能做什么 黑莲花是什么意思 胆固醇高吃什么食物好 大便粘便池是什么原因 伏地魔是什么意思
疏通血管吃什么好 美容美体包括什么项目 体检报告都检查什么 生气吃什么药可以顺气 关节疼挂什么科
喝断片了是什么意思hcv9jop5ns4r.cn 脚背浮肿是什么原因引起的hcv8jop8ns6r.cn 肝病去医院挂什么科hcv8jop7ns7r.cn 曦字五行属什么yanzhenzixun.com 羊水为什么叫羊水hcv7jop9ns6r.cn
大禹姓什么hcv9jop2ns7r.cn 重阳节是干什么的wmyky.com 12min是什么意思hcv8jop7ns0r.cn 绿茶属于什么茶hcv8jop6ns9r.cn 回是什么生肖hcv7jop5ns5r.cn
洋酒兑什么饮料好喝ff14chat.com 晋是什么意思hcv8jop1ns9r.cn 看见黑猫代表什么预兆hcv7jop4ns5r.cn 维他命是什么hcv8jop4ns4r.cn 冬天喝什么茶hcv9jop5ns9r.cn
gold是什么牌子hcv8jop0ns2r.cn 护理和护士有什么区别0735v.com 妞字五行属什么hcv7jop9ns8r.cn 梦见雨伞是什么意思hcv9jop4ns1r.cn 开庭前家属做什么准备beikeqingting.com
百度