Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用opencv用另一个图像填充空白图像_Python_Opencv - Fatal编程技术网

Python 使用opencv用另一个图像填充空白图像

Python 使用opencv用另一个图像填充空白图像,python,opencv,Python,Opencv,我将python与cv2库一起使用。我有一个小图像,我想填补一些空白。假设空白图像如下:(每个x表示一个像素,[255255255 ]) x x x x x x x x x x 我想将它的一些部分交换到另一个图像的数据(每个a表示另一个图像的一个像素) x x xax xax x x x x 最快的方法是什么?我试着在每个像素上循环并完成这项工作,但似乎效率很低 import cv2 import numpy as np tmp=np.zeros((1024,768,3),np.uint_8)

我将python与cv2库一起使用。我有一个小图像,我想填补一些空白。假设空白图像如下:(每个x表示一个像素,[255255255 ])

x x
x x
x x
x x x x

我想将它的一些部分交换到另一个图像的数据(每个a表示另一个图像的一个像素)

x x
xax
xax
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]

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

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。< /P> < P>首先将图像更改为数组,然后替换.< /P> 试试这个:

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

首先确保元素的数量正确。

如果您想替换一些大部件,如矩形,则使用ROI进行替换(其他答案已经解释过)。但是如果你处理的是随机分布的像素或复杂的形状,那么你可以试试这个

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

2)
Result=MasterImage
和(非
(MaskImage))+PickerImage
MaskImage

PS:我没有使用python,因为我不懂python,而且它的表达式非常简单。祝你好运

使用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)

看看opencv文档中的感兴趣区域哪个是感兴趣的区域?嗯,它似乎给出了一个错误:
a=np.zeros((5,5,3),np.uint8)b=np.zeros((3,3,3),np.uint8)a[:,:]=[255255]a[1:,1:][b;它说:value错误:操作数不能与形状(4,4,3)(3,3)一起广播。
谢谢,但python中不存在Mat类,所以迁移这段代码有点困难