Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 cv2将范围和复制转换为c++;巨蟒_Python_C++_Numpy_Opencv_Cv2 - Fatal编程技术网

Python cv2将范围和复制转换为c++;巨蟒

Python cv2将范围和复制转换为c++;巨蟒,python,c++,numpy,opencv,cv2,Python,C++,Numpy,Opencv,Cv2,我正在编写一个python视频稳定器,在代码的某些部分,我需要将2个图像复制到画布中 我试图把这个C++代码转换成Python,但我不能。 Mat cur2; warpAffine(cur, cur2, T, cur.size()); cur2 = cur2(Range(vert_border, cur2.rows-vert_border), Range(HORIZONTAL_BORDER_CROP, cur2.cols-HORIZONTAL_BORDER_CROP)); // Resi

我正在编写一个python视频稳定器,在代码的某些部分,我需要将2个图像复制到画布中

我试图把这个C++代码转换成Python,但我不能。

Mat cur2;

warpAffine(cur, cur2, T, cur.size());

cur2 = cur2(Range(vert_border, cur2.rows-vert_border), 
Range(HORIZONTAL_BORDER_CROP, cur2.cols-HORIZONTAL_BORDER_CROP));

// Resize cur2 back to cur size, for better side by side comparison
resize(cur2, cur2, cur.size());

// Now draw the original and stablised side by side for coolness
Mat canvas = Mat::zeros(cur.rows, cur.cols*2+10, cur.type());

cur.copyTo(canvas(Range::all(), Range(0, cur2.cols)));
cur2.copyTo(canvas(Range::all(), Range(cur2.cols+10, cur2.cols*2+10)));
我编写了此代码,但出现了错误:

ret, frame = cap.read()
new_frame = transform(frame,data[counter]) #some kind of low pass filter

canvas = np.zeros ((frame_height, frame_width*2+10,3))
np.copyto (canvas[:frame_width], frame)
np.copyto (canvas[frame_width+10:frame_width*2+10], new_frame)
我得到

“无法将硼从形状铸造成形状”

呃。但我想我用帆布的方式不对。在cpp代码中有
canvas(Range::all(),Range(0,cur2.cols))
我不知道如何在python中使用它

如何在python中使用Range函数和copyTo函数? 我应该如何将图像复制到画布的特定部分


有什么帮助吗?

cv::Mat实际上是python中的numpy数组。在这种情况下,应该使用numpy函数,而不是OpenCV函数

对于copyTo as克隆,请使用copy(),如中所示:

对于范围,numpy更容易。。。只需使用:

a[y1:y2, x1:x2,:]
这意味着从第y1行到第y2行,从第x1列到第x2列。如果您需要全部,只需像所有行一样保留

a[:, x1:x2,:]
最后一个冒号表示通道,在本例中为所有通道,但您也可以对其进行限制。如果你只需要一列或一个频道,你可以直接输入数字,而不是像这样使用“范围”

您还可以删除通道的最后一个冒号,它将使用所有通道。比如:

a[1:3, 4:8]
最后,要将值复制到图像中的某个位置,可以执行以下操作:

bigImage[y1:y2, x1:x2] =  image
您必须确保图像适合此位置(包括频道)。这意味着,如果图像大小为640x480,则无法执行以下操作:

bigImage[10:20, 20:30] =  image
但你可以做类似的事情

bigImage[10:20, 20:30] =  image[10:20, 10:20]

假设两者具有相同数量的通道

cv::Mat实际上是python中的numpy数组。在这种情况下,应该使用numpy函数,而不是OpenCV函数

对于copyTo as克隆,请使用copy(),如中所示:

对于范围,numpy更容易。。。只需使用:

a[y1:y2, x1:x2,:]
这意味着从第y1行到第y2行,从第x1列到第x2列。如果您需要全部,只需像所有行一样保留

a[:, x1:x2,:]
最后一个冒号表示通道,在本例中为所有通道,但您也可以对其进行限制。如果你只需要一列或一个频道,你可以直接输入数字,而不是像这样使用“范围”

您还可以删除通道的最后一个冒号,它将使用所有通道。比如:

a[1:3, 4:8]
最后,要将值复制到图像中的某个位置,可以执行以下操作:

bigImage[y1:y2, x1:x2] =  image
您必须确保图像适合此位置(包括频道)。这意味着,如果图像大小为640x480,则无法执行以下操作:

bigImage[10:20, 20:30] =  image
但你可以做类似的事情

bigImage[10:20, 20:30] =  image[10:20, 10:20]
假设两者具有相同数量的通道

我编写了这段代码,但我遇到了一个错误:您能否详细说明您的代码“不工作”的原因?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请输入这些详细信息,否则我们可能无法提供帮助。我遇到了“无法从形状转换为形状”的错误。但我想我用帆布的方式不对。在cpp代码中有canvas(Range::all(),Range(0,cur2.cols)),我不知道如何在python中使用它!我写了这段代码,但我犯了一个错误:你能详细说明你的代码是如何“不工作”的吗?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请输入这些详细信息,否则我们可能无法提供帮助。我遇到了“无法从形状转换为形状”的错误。但我想我用帆布的方式不对。在cpp代码中有canvas(Range::all(),Range(0,cur2.cols)),我不知道如何在python中使用它!