Python 3.x 循环程序导致索引#超出axis的界限#

Python 3.x 循环程序导致索引#超出axis的界限#,python-3.x,numpy,opencv,random,Python 3.x,Numpy,Opencv,Random,我对python和Opencv还很陌生,但我有一些cv2和random中的片段,可以用来编写一个简单的测试程序,以确保我了解这些库是如何工作的 我正在尝试创建一个能够有效生成彩色“雪”的程序,类似于老式电视在没有信号的情况下播放的节目 基本上,我使用random.randint(-1256)生成一个随机颜色,以获得一个介于0和255之间的值。我做了三次,并将每一次存储在不同的变量randB/G/R中。然后我对坐标randX/Y再做两次,使用img.shape获得最大数的宽度和高度变量 我不认为我

我对python和Opencv还很陌生,但我有一些cv2和random中的片段,可以用来编写一个简单的测试程序,以确保我了解这些库是如何工作的

我正在尝试创建一个能够有效生成彩色“雪”的程序,类似于老式电视在没有信号的情况下播放的节目

基本上,我使用random.randint(-1256)生成一个随机颜色,以获得一个介于0和255之间的值。我做了三次,并将每一次存储在不同的变量randB/G/R中。然后我对坐标randX/Y再做两次,使用img.shape获得最大数的宽度和高度变量

我不认为我的变量被解释为字符串。如果我快速中断循环并打印变量,则不会显示任何错误。如果我删除randX和randY变量并指定固定坐标或[X1:Y1,X2:Y2]的范围,它不会崩溃

import cv2
import numpy as np
import random

img = cv2.imread('jake_twitch.png', cv2.IMREAD_COLOR)
height, width, channels = img.shape

while True:
    randB = (random.randint(-1,256))
    randG = (random.randint(-1,256))
    randR = (random.randint(0,256))
    randX = (random.randint(0,width))
    randY = (random.randint(0,height))

    img[randX,randY] = [randB,randG,randR]
    cv2.imshow('Snow', img)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.imwrite('Snow.png', img)
cv2.destroyAllWindows
我希望我的代码在img.shape中的宽度和高度变量定义的指定“框”内无限期地为像素和随机颜色着色

它似乎开始这样做,但如果程序运行超过一秒钟,它就会崩溃并抛出这个错误

“索引器:索引702超出大小为702的轴1的界限”


您的图像宽度为widthheight像素宽-但相应的索引从
0..width-1
0..height-1

返回的包含限制-因此

random.randint(0,width)
可能会给你宽度。。。哪一个太大了:

random.randint(a,b)

返回一个随机整数N,这样图像的宽度高度像素宽-但相应的索引从
0..width-1
0..height-1

返回的包含限制-因此

random.randint(0,width)
可能会给你宽度。。。哪一个太大了:

random.randint(a,b)

返回一个随机整数N,这样a我觉得很傻,我看了rand文档,没有意识到它是包含在内的!非常感谢。我觉得自己太傻了,我看了兰德公司的文档,我没有意识到它是包容性的!非常感谢你。