You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让OpenCV的Canny边缘检测输出True/False或1/0的二进制数组?

当然没问题!OpenCV的Canny边缘检测默认输出是8位灰度格式的NumPy数组(0表示非边缘像素,255表示边缘像素),要转换成你想要的布尔型(True/False)或者1/0的二进制数组,其实几步就能实现,和Matlab默认的输出形式完全对齐。

方法1:转换为布尔数组(True=边缘,False=非边缘)

直接用NumPy的比较运算符就能完成,因为Canny输出里边缘像素固定是255,非边缘都是0,两种判断方式都可行:

import cv2
import numpy as np

# 读取目标灰度图像
gray_img = cv2.imread("your_image_path.jpg", cv2.IMREAD_GRAYSCALE)
# 执行Canny边缘检测(参数可根据需求调整)
canny_result = cv2.Canny(gray_img, threshold1=50, threshold2=150)

# 方式1:判断像素是否大于0(等价于是否为边缘)
bool_edges = canny_result > 0
# 方式2:直接判断是否等于255(结果和上面完全一致)
bool_edges = canny_result == 255

方法2:转换为1/0的整数数组(1=边缘,0=非边缘)

如果需要数值型的二进制数组,有几种简洁的实现方式:

  • 方式A:基于布尔数组转换类型
# 把布尔数组直接转为uint8类型,True会变成1,False变成0
binary_edges = (canny_result > 0).astype(np.uint8)
  • 方式B:用np.where做条件映射
# 当像素为255时赋值1,否则赋值0
binary_edges = np.where(canny_result == 255, 1, 0)
  • 方式C:利用整数除法简化操作
# 255//255=1,0//255=0,一步得到结果
binary_edges = canny_result // 255

补充一下:Matlab里的edge函数默认返回的就是逻辑(布尔)数组,和我们上面生成的bool_edges效果完全相同,这样转换后就能和Matlab的输出逻辑保持一致啦。

内容的提问来源于stack exchange,提问作者Anas Mansour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:01:15