用python从图像中提取颜色
我有一个黑白图像和相同的彩色笔划图像。我想做的是提取颜色笔划,模糊它们,然后将原始图像与模糊图像混合。我通过相互减去两幅图像来提取颜色笔划,但我在黑色背景上获得这些颜色笔划,而我需要它们在白色上与原始图像混合。这是我代码的一部分:用python从图像中提取颜色,python,image,opencv,image-processing,python-imaging-library,Python,Image,Opencv,Image Processing,Python Imaging Library,我有一个黑白图像和相同的彩色笔划图像。我想做的是提取颜色笔划,模糊它们,然后将原始图像与模糊图像混合。我通过相互减去两幅图像来提取颜色笔划,但我在黑色背景上获得这些颜色笔划,而我需要它们在白色上与原始图像混合。这是我代码的一部分: def imageblur(cimg): return cv2.blur(cimg, (50, 50)) bw = glob('path1') colorful = glob('path2') output_dir = 'path3' index = 0
def imageblur(cimg):
return cv2.blur(cimg, (50, 50))
bw = glob('path1')
colorful = glob('path2')
output_dir = 'path3'
index = 0
for i,j in zip(bw, colorful):
img1 = cv2.imread(i)
img2 = cv2.imread(j)
color = cv2.subtract(img1,img2)
color = imageblur(color)
mask = Image.fromarray(np.uint8(color))
img = Image.fromarray(np.uint8(img1))
im = Image.blend(img, mask, 0.5)
#color = img1 + color
im.save(os.path.join(output_dir, str(index) + '.jpg'))
index += 1
print(index)
示例如果要将RGB图像的背景从黑色更改为白色,可以执行以下操作:
#thresholds all black color in your "color-on-black-background" image
#to maximum value (255,255,255) (white) and sets the rest (yours colors)
#to (0,0,0) (black)
thresholded=cv2.inRange(img,(0,0,0),(0,0,0))
#add both images
res=img+cv2.cvtColor(thresholded,cv2.COLOR_GRAY2BGR)
输入(img):
阈值化(阈值化):
输出(分辨率):如果要将RGB图像的背景从黑色更改为白色,可以执行以下操作:
#thresholds all black color in your "color-on-black-background" image
#to maximum value (255,255,255) (white) and sets the rest (yours colors)
#to (0,0,0) (black)
thresholded=cv2.inRange(img,(0,0,0),(0,0,0))
#add both images
res=img+cv2.cvtColor(thresholded,cv2.COLOR_GRAY2BGR)
输入(img):
阈值化(阈值化):
输出(res):使用样本图像获得结果。处理过程略有改变
import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
def show(title, img, color=True):
if color:
plt.imshow(img[:,:,::-1]), plt.title(title), plt.show()
else:
plt.imshow(img, cmap='gray'), plt.title(title), plt.show()
img = cv2.imread('color_strokes.jpg')
show('original', img)
mask=cv2.inRange(img,(0,0,0),(150,150,150))
show('mask', mask, False)
res=255-cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)
show('result', res, False)
输出:
使用示例图像获得结果。处理过程略有改变
import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
def show(title, img, color=True):
if color:
plt.imshow(img[:,:,::-1]), plt.title(title), plt.show()
else:
plt.imshow(img, cmap='gray'), plt.title(title), plt.show()
img = cv2.imread('color_strokes.jpg')
show('original', img)
mask=cv2.inRange(img,(0,0,0),(150,150,150))
show('mask', mask, False)
res=255-cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)
show('result', res, False)
输出:
您预期会发生什么?255(白色)-255(白色)=0(黑色)。你有自己的想法吗?或者你只是想被填鸭式地灌输一个解决方案?你期望发生什么?255(白色)-255(白色)=0(黑色)。你有自己的想法吗?还是你只是想被灌输一个解决方案?