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

使用numpy修改图像像素值失败且触发OpenCV报错如何解决

报错中文翻译

错误:OpenCV(4.5.3) C:/Users/runneradmin/AppData/Local/Temp/pip-req-build-sn_xpupm/opencv/modules/highgui/src/precomp.hpp:155: 错误: (-215:断言失败) src_depth != CV_16F && src_depth != CV_32S 位于函数 'convertToShow'

报错原因
  • np.where返回的数组默认是32位有符号整数(int32)类型,对应OpenCV里的CV_32S类型,cv.imshow原生不支持显示该类型的数组,触发了源码里的断言检查失败,进而导致报错甚至内核崩溃。
  • 额外的逻辑问题:你当前mask == a的写法是逐通道进行匹配判断,会把单个通道匹配的位置也赋值为255,无法实现「BGR三个通道值完全等于目标像素的像素点替换为白色」的需求。
修复方案

你可以按照下面的逻辑修改代码:

  1. 先生成所有三通道完全匹配目标像素的掩码
  2. 把匹配到的像素点统一赋值为白色
  3. 确保最终传给cv.imshow的数组是uint8类型

修复后的完整代码:

import numpy as np
import cv2 as cv

mask = cv.imread("colors.jpg")
# 目标像素值,注意OpenCV读入的图片是BGR通道顺序
target_bgr = mask[400,500]
print(target_bgr)
# [204  71  63]

# 生成三通道完全匹配的掩码,维度和原图一致方便赋值
match_mask = (mask == target_bgr).all(axis=-1, keepdims=True)
# 匹配的位置设为白色,其他位置保留原图,也可以根据需求设为0
b = np.where(match_mask, 255, mask).astype(np.uint8)

cv.imshow("mask", b)
cv.waitKey(0)
cv.destroyAllWindows()

如果你需要生成二值图(匹配为白,不匹配为黑),可以把赋值行改成:

b = np.full_like(mask, 0, dtype=np.uint8)
b[match_mask.repeat(3, axis=-1)] = 255

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:57:03