opencv-python提取某种颜色在另一个图层上显示
Posted zzg1097940918
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv-python提取某种颜色在另一个图层上显示相关的知识,希望对你有一定的参考价值。
还是以这张图片为例,我们的老演员了
之前写过指定坐标填充颜色的博客,忘记的可以点这里:opencv-python实现PS中的油漆填充功能,一键填充颜色
我们对几个坐标进行填充灰色(127,127,127)
现在我们要对图片中的灰色(127,127,127)的颜色区域进行提取到一张白色背景图片上
这是最终提取的结果。
首先是原始图片填充了3个灰色地区,然后是生成了一个全白的图片,在将像素值为(127,127,127)的保留在这个图片上,会发现其实填充的区域像素值并不是一定都是这个值,导致最后在白图上保留的灰色区域略有不规整。这时候我们以灰度范围内取值即可。
这个取到的结果就相比之前的要好很多
代码如下:
from PIL import Image
import cv2 as cv
import numpy as np
img1 = cv.imread('result.jpg') # 读入图片2
cv.imshow('origin',img1)
# img1 = cv.resize(img1, dsize=(1200, 960)) # 将图片2也调整到固定大小
orininal_h = np.array(img1).shape[0] # 获得图片1的高
print(orininal_h)
orininal_w = np.array(img1).shape[1] # 获得图片1的宽
print(orininal_w)
img2 = 255 * np.ones((orininal_h, orininal_w, 3), dtype=np.uint8) #生成全白的图片
cv.imshow('white',img2)
img1 = np.array(img1) # 图片1变成numpy类型
img2 = np.array(img2) # 图片1变成numpy类型
for j in range(orininal_h): # 循环遍历所有像素点
for k in range(orininal_w):
if img1[j, k, 1] >= 120 and img1[j, k, 1] <= 135 and img1[j, k, 2] >= 120 and img1[j, k, 2] <= 135 and img1[j, k, 0] >= 120 and img1[j, k, 0] <= 135: # 如果这个像素点的值为灰色(127,127,127)像素值附近
img2[j, k, 0] = img1[j, k, 0] # 将img2的图像该位置像素替换成img1
img2[j, k, 1] = img1[j, k, 1]
img2[j, k, 2] = img1[j, k, 2]
cv.imshow('result',img2)
cv.imwrite('result1.jpg', img2)
cv.waitKey(0)
有需要写代码的可以加扣扣:334542894
深度学习,图像识别领域,还有nlp自然语言处理等等。
以上是关于opencv-python提取某种颜色在另一个图层上显示的主要内容,如果未能解决你的问题,请参考以下文章