首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python & Numpy -在数组中找到不是零的值模式

Python & Numpy -在数组中找到不是零的值模式
EN

Stack Overflow用户
提问于 2020-04-26 03:56:35
回答 2查看 3.2K关注 0票数 0

我有一个Numpy数组(它是图像中的红色通道)。

我已经屏蔽了其中的一部分(使这些值为0),现在我想在我的非蒙面区域中找到值的模式。

我遇到的问题是,Mode命令总是带回来。我想排除0值(蒙面区域),但我不知道如何做到这一点?

这是我用来尝试获取模式的命令:

代码语言:javascript
运行
复制
#mR is the Numpy Array of the Red channel with the values of the areas I don't want at 0


print(stats.mode(mR[:, :], axis=None))

返回0作为我的模式。如何排除0或蒙面区域?

更新-完整代码:

这是我使用来自scipy.misc的"face“的完整代码--对该图像的处理仍然很慢,结果是"107”,这对于蒙面区域(阴影)来说是很高的,所以看起来它处理的是整个图像,而不仅仅是掩码中的区域。

代码语言:javascript
运行
复制
import cv2
import numpy as np
from scipy import stats
import scipy.misc


img = scipy.misc.face()

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
r, g, b = cv2.split(img_rgb)


img_lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l_channel ,a_channel, b_channel = cv2.split(img_lab)


mask = cv2.inRange(l_channel, 5, 10)
cv2.imshow("mask", mask)


print(stats.mode(r[mask],axis=None))


cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-26 04:13:49

您只需屏蔽数组并使用np.histogram

代码语言:javascript
运行
复制
counts, bins = np.histogram(mR[mR>0], bins=np.arange(256))

# mode
modeR = np.argmax(counts)
票数 2
EN

Stack Overflow用户

发布于 2020-04-26 04:00:30

更新:

在OP友好地发布了它们的完整代码之后,我可以确定stats.mode()要么非常慢,要么永远没有完成(谁知道为什么呢?)

另一方面,@Quang的解决方案既优雅又快捷--而且它在尊重面具方面也适用于我。

因此,我当然支持QH的回答。

我以前的答案是:

试一试

代码语言:javascript
运行
复制
print(stats.mode(mR[mask],axis=None))

除了掩蔽之外,下面还详细讨论了有效计算numpy数组的模式:

Most efficient way to find mode in numpy array

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61435595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档