加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

20190911_随笔小实现_对图像进行像素处理

发布时间:2020-12-20 10:45:07 所属栏目:Python 来源:网络整理
导读:20190911 使用 python 库 cv2 对图像进行了抠图,按位异或,修改像素值 等操作 目标图1:imgS ? 目标图2:imgG ? 对两图进行按位异或操作: 代码: 1 imgR = cv2.bitwise_xor(imgS,imgG) 2 cv2.imshow( " imgR " ,imgR) ? 结果图像:imgR ? ? ? ?目标图3:(

20190911

使用 python 库 cv2 对图像进行了抠图,按位异或,修改像素值 等操作

目标图1:imgS

?

目标图2:imgG

?

对两图进行按位异或操作:

代码:

1 imgR = cv2.bitwise_xor(imgS,imgG)
2 cv2.imshow("imgR",imgR)

?

结果图像:imgR

?

?

?

?目标图3:(对此图处理,只保留红点和内圈橙)imgOperate

?

内圈橙色区域 BGR_橙 = [39,127,255]

红点 BGR_红 = [36,28,236]

?

尝试1:遍历每一个像素,将像素值不为 BGR_橙的点像素修改为 [0,0,0],将 BGR_橙改为 [255,255,255]

代码片段:

 1 px_3C = [39,255]  # B,G,R
 2 
 3 for hIx in range(0,height,1):        # height
 4     for wIx in range(0,width,1):     # width
 5         
 6         # if imgOperate[hIx,wIx] != [39,255]:    # 不能这么操作
 7         #     imgOperate[hIx,wIx] = [0,0]
 8         # else:
 9         #     imgOperate[hIx,wIx] = [255,255,255]
10         
11         for cIx in range(channel):    # 对每一个像素点的每一个通道值进行修改
12             if imgOperate[hIx][wIx][cIx] != px_3C[cIx]:
13                 imgOperate[hIx][wIx][cIx] = 0
14             else:
15                 imgOperate[hIx][wIx][cIx] = 255                    
16 
17 cv2.imshow("imgOperate after Op:",imgOperate)

?

?

尝试1结果图像:imgOperate

?

?

遗漏分析,没有考虑到外圈黄色区域 BGR_黄 = [0,242,255],在尝试1方法中,第三个 for 遍历 channel Red 时会发生误操作(即保留红色区域红色通道的值)

?

尝试2:遍历每一个像素点,依据像素值条件修改或保留像素值,即将橙色区域赋值 [255,255,255],红点区域保留原像素值

代码片段:

 1 for hIx in range(height):
 2     for wIx in range(width):
 3         if imgOperate_C[hIx][wIx][0] == 39 and imgOperate_C[hIx][wIx][1] == 127 and imgOperate_C[hIx][wIx][2] == 255:  # 橙色区域,改像素
 4             imgOperate_C[hIx][wIx][0] = 255
 5             imgOperate_C[hIx][wIx][1] = 255
 6             imgOperate_C[hIx][wIx][2] = 255
 7         elif imgOperate_C[hIx][wIx][0] == 36 and imgOperate_C[hIx][wIx][1] == 28 and imgOperate_C[hIx][wIx][2] == 236:    # 红色区域,保留像素
 8             imgOperate_C[hIx][wIx][0] = 36
 9             imgOperate_C[hIx][wIx][1] = 28
10             imgOperate_C[hIx][wIx][2] = 236
1         else:  # 非目标像素 [0,0]
2             imgOperate_C[hIx][wIx][0] = 0
3             imgOperate_C[hIx][wIx][1] = 0
4             imgOperate_C[hIx][wIx][2] = 0

?

尝试2结果图像:imgOperate_C

?

?

?

分析:已经把目标区域边界和目标点成功的抠出。

?

将尝试2结果图像与结果图像进行加运算 cv2.add()

代码:

1 imgR_ROI = cv2.add(imgR,imgOperate_C)

结果图像:imgR_ROI

?

?将结果图像 [255,255] 区域还原橙色 [39,255]

1 for hIx in range(height):
2     for wIx in range(width):
3         if imgR_ROI[hIx][wIx][0] == 255 and imgR_ROI[hIx][wIx][1] == 255 and imgR_ROI[hIx][wIx][2] == 255:
4             imgR_ROI[hIx][wIx][:] = [39,255]

?

最终结果图像:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读