用opencv填充另一个空白图像

时间:2014-09-24 08:44:51

标签: python opencv

我正在使用python和cv2库。我有一个小图像,我想填补一些空白区域。假设空白图像如下:(每个x表示一个像素,[255,255,255])

  

x x x x
  x x x x
  x x x x
  x x x x

我想将其中的一些部分与另一个图像中的数据交换(每个图像表示来自另一个图像的像素)

  

x x x x
  x a a x
  x a a x
  x x x x

最快捷的做法是什么?我尝试循环遍历每个像素并完成工作,但它似乎非常低效。

import cv2
import numpy as np
tmp=np.zeros((1024,768,3),np.uint_8)
image= .. #image captured from camera
for(i in range(480)):
  for(j in range(640)):
    tmp[i+144][j+197]=image[i][j]

4 个答案:

答案 0 :(得分:2)

使用numpy切片。

tmp = np.zeros((1024,768,3),np.uint_8)

img[y1:y2, x1:x2] = tmp[y3:y4, x3:x4] # given that (y2-y1) = (y4 - y3) and same for x

或者用一些颜色填充

img[y1:y2, x1:x2] = (255, 255, 255)

答案 1 :(得分:0)

简而言之,你可以这样做:

Size taille = new_image.size();   // New_image is the image to be inserted
Mat  white_roi( white_image, Rect( x, y, taille.width, taille.height ) );
                                  // white_roi is a subimage of white_image
                                  //          that start from the point (x,y)
                                  // and have the same dimension as a new_image
new_image.copyTo( white_roi );    // You copy the new_image into the white_roi,
                                  //          this in the original image

这是c ++代码,你必须适应python。

答案 2 :(得分:0)

首先将图像更改为数组,然后进行替换。

试试这个:

import cv2
import numpy as np
tmp=np.zeros((1024,768,3),np.uint_8)
image= .. #image captured from camera
src = np.array(image)

tmp[144:, 197:] = src

确保首先确定元素数量。

答案 3 :(得分:0)

如果要替换矩形等大部件,请使用ROI替换(如已解释的其他答案)。但是如果你正在处理随机分布的像素或复杂的形状,那么你可以试试这个。

1)为要替换的部分创建一个掩码二进制图像MaskImage,因为true rest设置为false。

2)Result = MasterImage AND NOT (MaskImage)) + PickerImage AND MaskImage

PS:我没有使用过python,因为我不懂Python而且很容易表达。祝你好运