小编Man*_*nas的帖子

当len(轮廓)= 1时,轮廓和轮廓[0]之间有什么区别?

我想找到一个图像的轮廓然后画出它的凸包.我正在做的是加载图像,阈值,找到它的轮廓,然后绘制凸包.

gray = cv2.imread(test_paths[i], 0)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
Run Code Online (Sandbox Code Playgroud)

检测到的轮廓数量等于1.如果我尝试绘制轮廓,问题就出现了

cv2.drawContours(cnt_dst, cnt, -1, (255, 0, 0), 3)
plt.imshow(cnt_dst)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我将代码更改为以下内容:

cv2.drawContours(cnt_dst, contours, 0, (255, 0, 0), 3)
plt.imshow(cnt_dst)
Run Code Online (Sandbox Code Playgroud)

轮廓不同:

在此输入图像描述

请注意,我得到了相同(好)的结果:

cv2.drawContours(cnt_dst, contours, -1, (255, 0, 0), 3)
Run Code Online (Sandbox Code Playgroud)

有关为什么会发生这种情况的任何想法?

python opencv computer-vision opencv-contour

4
推荐指数
1
解决办法
830
查看次数

使用带有彩色框架的matplotlib在绘图中显示图像

我想绘制一个带有图像的图形。我正在进行k均值聚类,之后,我想以相同的框架颜色在其聚类上显示每个图像。

我有一些代码,基本上将图像放在带有黑框的图形上

fig = plt.gcf()
fig.clf()
ax = plt.subplot(111)

# add a first image
for i in range(0, len(dataset['val'].path)):    
    ab = AnnotationBbox(OffsetImage(img, zoom=.15, cmap='gray'),
                        [reduced_data[i][0], reduced_data[i][1]],
                        frameon=True,
                        xybox=(10, 10),
                        xycoords='data',
                        boxcoords="offset points",
                        arrowprops=dict(arrowstyle="-"))

    ax.add_artist(ab)
plt.draw()
plt.show()
Run Code Online (Sandbox Code Playgroud)

我正在查看有关scickit learn文档的一些教程,并且还检查了网页中的AnnotationBboxOffsetImage构造函数matplotlib,但没有结果。我想知道是否有一种方法可以更改插入绘图中图像的框架颜色,以使其与我为每个群集提供的颜色匹配。

python plot machine-learning matplotlib

2
推荐指数
1
解决办法
1302
查看次数

pytorch中的列选择是否可区分?

Pytorch中的列选择是否可以区分?例如,如果我想从每一行中选择一列以创建一个新的行X 1数组,然后使用此新数组作为背景,背景将正常工作吗?

qvalues = qvalues[range(5),[0,1,0,1,0]]
Run Code Online (Sandbox Code Playgroud)

如上所示从5 * 2张量完成元素选择?

python backpropagation pytorch

2
推荐指数
1
解决办法
1108
查看次数

numpy和操作a,b = b,a

我有两个列表,a b其中包含随机数量的元素(比如8),我想在这一点上进行分割cp.在那之后,我想保持列表的一部分,然后在其他列表中cp更改部分cp.

我使用以下代码:

cp = 4
a = [1, 3, 2, 4, 5, 8, 7, 6]
b = [3, 1, 5, 6, 2, 8, 4, 7]
parents = np.array([a,b])
parents[0][cp:], parents[1][cp:] = parents[1][cp:], parents[0][cp:]
print parents

# Print result:
# [[1 3 2 4 5 8 7 6]
#  [3 1 5 6 5 8 7 6]]
Run Code Online (Sandbox Code Playgroud)

如代码中所示,我显然是因为它parents[0]在分配结束之前分配了子数组的值而得到错误.

如果我使用传统的python列表,这似乎工作正常:

a = [1,3,2,4, 5,8,7,6]
b = [3,1,5,6, 2,8,4,7]
a[cp:] , b[cp:] …
Run Code Online (Sandbox Code Playgroud)

python numpy

1
推荐指数
1
解决办法
96
查看次数