首页 > 编程问答 >标量添加中的 Python 溢出警告

标量添加中的 Python 溢出警告

时间:2024-07-28 07:51:53浏览次数:6  
标签:python numpy opencv math integer-arithmetic

我想执行一个简单的操作: b+g+r b,g,r 变量是整数并且值低于 256。我收到溢出警告和错误的结果。问题是操作很简单(结果不高于 765),我不应该收到溢出警告

这是我的代码:


import cv2 as cv
import numpy as np

imgname = 'r_hh_classic.png'

img = cv.imread(imgname)

h,w,_ = img.shape

for y in range(h):
    for x in range(w):
        b,g,r = img[y,x]
        print(b,g,r,b+g+r) #print var b, var g, var r, and b+g+r
        if b+g+r <= 382:
            img[y,x] = 255-img[y,x,0], 255-img[y,x,1], 255-img[y,x,2]

cv.imshow('',img)

Python Shell:

Warning (from warnings module):
  File "C:/Users/USER/AppData/Local/Programs/Python/Python310/!Saves/_images_/negate 2.py", line 14
    print(b,g,r,b+g+r)
RuntimeWarning: overflow encountered in scalar add
165 159 191 3

Warning (from warnings module):
  File "C:/Users/USER/AppData/Local/Programs/Python/Python310/!Saves/_images_/negate 2.py", line 15
    if b+g+r <= 382:
RuntimeWarning: overflow encountered in scalar add
165 159 191 3
165 159 191 3
164 157 191 0
162 156 191 253
161 155 190 250
161 155 190 250
161 154 190 249
160 154 189 247
160 154 189 247
160 152 189 245
159 151 188 242
159 151 188 242
157 151 188 240
157 151 188 240
156 149 186 235
155 148 185 232
154 148 185 231
154 148 185 231
154 146 185 229
152 145 185 226
152 145 185 226
152 145 185 226
152 145 184 225
151 143 183 221
150 143 184 221
150 143 184 221
149 142 182 217
149 142 182 217
149 140 181 214
148 140 181 213
146 139 181 210
146 138 181 209

前 3 个数字是 b、g、r 和第 4 个是 b+g+r 但你可以看到,这是极其错误的


你的代码中出现溢出警告,是因为你正在对 cv2.imread() 返回的 NumPy 数组 执行操作。尽管你的图像在 0-255 的范围内具有值,但 cv2.imread() 加载的图像数据类型默认情况下为 uint8 (8 位无符号整数)。当 uint8 值的总和超过 255( uint8 的最大值)时,就会发生溢出。

你可以通过以下两种方式解决此问题:

1. 在计算之前转换像素值:

在执行加法运算之前,将像素值从 uint8 转换为更大的数据类型(如 int )。这将防止溢出。

```python import cv2 as cv import numpy as np

imgname = 'r_hh_classic.png' img = cv.imread(imgname)

h,w,_ = img.shape

for y in range(h): for x in range(w): b,g,r = img[y,x] print(b,g,r, b + g + r) # 在加法之前转换为 int if int(b) + int(g) + int(r) <= 382: img[y,x] = 255-img[y,x,0], 255-img[y,x,1], 255-img[y,x,2]

cv.imshow('',img) cv.waitKey(0) ```

2. 更改图像数据类型:

在读取图像时,将图像数据类型更改为 int 或更大的数据类型。

```python import cv2 as cv import numpy as np

imgname = 'r_hh_classic.png' # 以 int16 数据类型读取图像 img = cv.imread(imgname, cv.IMREAD_ANYDEPTH)

h,w,_ = img.shape

for y in range(h): for x in range(w): b,g,r = img[y,x] print(b,g,r,b+g+r) if b+g+r <= 382: img[y,x] = 255-img[y,x,0], 255-img[y,x,1], 255-img[y,x,2]

cv.imshow('',img) cv.waitKey(0) ```

这两种方法都可以防止溢出警告并给出正确的结果。选择哪种方法取决于你的具体需求和编码偏好。

标签:python,numpy,opencv,math,integer-arithmetic
From: 76159083

相关文章

  • 在 Python 中读取部分 MP3 文件时处理“对于可用位计数来说太大”错误
    我正在尝试读取MP3文件的特定部分,但遇到错误:[src/libmpg123/layer3.c:INT123_do_layer3():1771]error:part2_3_length(1376)toolargeforavailablebitcount(760)可以访问音频文件此处我的环境是使用此Docker映像设置的:pytorc......
  • Python SQLAlchemy 2.0 使用 dataclass_transform 非必需字段类型
    我刚刚在一个新项目上安装了SQLAlchemy2.0,我正在尝试使我的模型尽可能类型安全。通过使用@typing_extensions.dataclass_transform,我已经能够实现我想要实现的大部分目标类型检查,但是当前所有字段都被标记为不需要。例如:@typing_extensions.dataclass_tran......
  • 当读取字节时,Python 将 \n 解释为 0xd0
    换行符被解释为Ð(0xd0)而不是(0x0a),我真的不知道如何解决这个问题。我也不知道从哪里开始。当尝试使用此代码时,它将0x0a读为0xd0。withopen(path,"rb")asroot:b_arr=root.read()+b""print("Processing...")buffer=""b_arr......
  • 在Python 3中获取范围的特定形式
    当获取range(1,100)时,我得到:[1,2,3,4,5...99]我需要像这个范围的zip之类的东西:[50,49,51,48,52,47,53...99]如何获取它?背景:这都是关于比特币谜题66的。首先我做了对过去已知的私钥进行线性回归预测,直到第65题为止。我......
  • Python:如何使用pyaudio或sounddevice等库进行自动录音?
    我想做一个项目,需要满足以下录音要求:程序启动后,会在后台不断检测麦克风的声音,当声音分贝大于一定值时打开录音流级别,当分贝低于一定级别时关闭录音流并保存为wav文件。我知道原理,但我无法使用这些库来实现。我想实现以上结果使用Python实现自动录音以下代......
  • OpenCV aruco 标记检测不起作用
    我想在OpenCV中检测图像中的aruco标记。我的OpenCV版本是4.8.0。看起来它已被其他一些功能取代,我找不到任何指南。感谢您的帮助!#programtodetectarucomarkerswithopencv24.8.0versionimportcv2importnumpyasnp#dictionaryofarucomarkersaruco_dict=......
  • 当我们创建一个在 https 服务器上获取和发送数据的 python 应用程序时,我们应该如何处
    python脚本使用Urllib3,我的服务器是在Node.js上编写的脚本。我担心(并且不清楚)证书:我是否需要将我的python应用程序上的证书另存为变量?例如我这样做了,http=urllib3.PoolManager(cert_reqs="CERT_REQUIRED",ca_certs='client-cert.pem')并且我不知道......
  • 使用 Python 进行 Web 抓取以获取数据 NoneType ERROR
    我正在努力为我的学校项目获取美元和价格。所以我决定为此使用网络抓取,但我有一个问题。当我尝试在服务器上使用我的代码时,它给我NoneType错误。它可以在googlecolab上使用,但我无法在我的电脑或服务器上使用。我该如何解决这个问题?网页抓取代码;defdolar():he......
  • Python 请求 - response.json() 未按预期工作
    我正在尝试从Python的requests模块调用API。在邮递员上,返回的响应标头中的Content-Type是application/json;charset=utf-8,响应json数据是我期望的样子。但是,在python上的API的get方法之后运行response.json()会抛出错误simplejson.errors......
  • OpenCV 计算图像上的三角形
    我们如何计算该图像中的三角形:首先,我们需要消除颜色噪声。然后我们可以尝试cv2.Canny和cv2.findCountours。但是cv2.findCountours如何区分各个交叉形状?我尝试了这个:img=cv2.fastNlMeansDenoisingColored(img,None,6,6)kernel=cv2.getStructurin......