转换c++;复制到python

转换c++;复制到python,python,c++,image,opencv,image-processing,Python,C++,Image,Opencv,Image Processing,我尝试将下面的OpenCV C++转换为Python: Cpp: 我不知道如何处理将step3转换为python的问题。我在python中完成了步骤1和步骤2,如下所示 #step1 edges = cv2.adaptiveThreshold(vertical,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,3,-2) #step2 kernel = np.ones((2, 2), dtype = "uint8") dilated = cv2

我尝试将下面的OpenCV C++转换为Python:

Cpp:

我不知道如何处理将step3转换为python的问题。我在python中完成了步骤1和步骤2,如下所示

#step1
edges = cv2.adaptiveThreshold(vertical,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,3,-2)

#step2 
kernel = np.ones((2, 2), dtype = "uint8")
dilated = cv2.dilate(edges, kernel)

cv::Mat::copyTo
在您的情况下,只需复制图像即可。事实上,您使用它的方式相当于使用
cv::Mat::clone
,因为您没有指定掩码。同样,在Python中,使用OpenCV使用NumPy数组作为主要数据类型的方法:

# Step #3
smooth = vertical.copy()
对于步骤5,您现在正在基于掩码进行复制。我已经在以前的帖子中回答了如何做到这一点:。您看到的是第二种情况,您要复制到的矩阵已经分配,并且只希望复制掩码中非零的值。不过,为了完整起见,我将把它放在这里

基本上,您希望使用
平滑
修改
垂直
,但仅复制
平滑
中由
边中的非零元素定义的元素。您可以使用查找非零的行和列位置,并使用它们在
平滑
垂直
之间复制正确的值。它看起来还具有灰度图像,因此这使它更加简单:

# Step #5
(rows, cols) = np.where(edges != 0)
vertical[rows, cols] = smooth[rows, cols]

非常感谢。现在这是有道理的。此外,您对步骤5的解释非常有用。在更大的上下文中,我试图将C++代码转换为Python。我做过,但我怀疑这是不正确的,因为结果不一样。我已经发布了一个单独的问题,我真的非常感谢你的意见,非常欢迎。我现在确实得睡觉了,但我醒来后会检查你的问题。
# Step #5
(rows, cols) = np.where(edges != 0)
vertical[rows, cols] = smooth[rows, cols]