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提取某种颜色在另一个图层上显示的主要内容,如果未能解决你的问题,请参考以下文章

iOS:当视图背景颜色为清晰颜色时,图层背景颜色不显示

如何在 Photoshop 填充图层中检索颜色

arcgis图例颜色怎么批量导入

[OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V

OpenCV-Python基础教程4-颜色空间转换

如何将子图层居中在另一图层上?