【问题标题】:How to crop image using masked image and overlay on top of other image with same color?如何使用蒙版图像裁剪图像并叠加在具有相同颜色的其他图像之上?
【发布时间】:2022-02-15 03:43:29
【问题描述】:

我正在尝试根据蒙版图像裁剪图像并将裁剪后的图像粘贴到新的背景图像上。我能够做到这一点,但裁剪后的图像是灰色而不是原始图像中的颜色

从上图中可以看出,裁剪后的图像颜色与原始源猫图像的颜色不同,裁剪后的图像是灰色的,而在原始图像中它包含金黄色。

我的代码如下来执行这个

import cv2
src1=cv2.imread('cat.jpg',0)
mask=cv2.imread('mask_cat.jpg',0)
ret, thresh1 = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY)
src1 [thresh1==0] = 0
h, w = src1.shape
red = (0, 0, 0)
width, height = 1742, 815
back =cv2.cvtColor( create_blank(width, height, rgb_color=red),cv2.COLOR_BGR2GRAY)
hh, ww = back.shape
yoff = round((hh-h)/2)
xoff = round((ww-w)/2)
result = back.copy()
result[yoff:yoff+h, xoff:xoff+w] = src1

如何在裁剪后的图像中获得与裁剪位置的原始源颜色相同的颜色?任何解决此问题的建议或帮助将不胜感激。

【问题讨论】:

  • 这能回答你的问题吗? OpenCV - Apply mask to a color image
  • @Bilal Noo,我尝试了这种方法,但我仍然得到灰色图像
  • 我尝试过这种方法......”,你能告诉我你是如何应用这种方法的吗?

标签: python python-3.x opencv image-processing computer-vision


【解决方案1】:
import cv2
cat = cv2.imread('cat.jpg')
mask_cat = cv2.imread('mask_cat.jpg', 0)
result = cv2.bitwise_and(cat,cat,mask = mask_cat)

我也看到你尝试重塑图像。可以按照以下方式完成。

width, height = 1742, 815
reshaped_result = cv2.resize(result, dsize=(width, height))

将裁剪后的图像放置在调整大小的图像上

width, height = 1742, 815
result_final = np.zeros((height,width,3), np.uint8)
h, w = result.shape[:2]
hh, ww = result_final.shape[:2]
yoff = round((hh-h)/2)
xoff = round((ww-w)/2)
result_final[yoff:yoff+h, xoff:xoff+w] = result

【讨论】:

  • 嘿,谢谢你的回答,这行得通,是否可以将裁剪后的图像粘贴到调整大小的图像上?所以裁剪后的图像不会被放大
  • 你去。我已经按照你的意愿编辑了它
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2021-01-28
  • 2015-07-09
相关资源
最近更新 更多