numpy 标量添加中的Python溢出警告

kiayqfof  于 2023-05-17  发布在  Python
关注(0)|答案(1)|浏览(306)

我想执行一个简单的操作: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

前三个数字是b,g,r,第四个是b+g+r,但是你可以看到,这是非常错误的

6ovsh4lw

6ovsh4lw1#

dtype是uint8,任何超过255的溢出。为了避免溢出,请使用cv2.add()(参见docs.opencv.org/4.7.0/d0/d86/tutorial_py_image_arithmetics.html),我也试图将结果拟合到uint8
答复人:@Barmar,@stateMachine,@塞韦林Pappadeux(见评论)

相关问题