我正在使用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]
答案 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而且很容易表达。祝你好运