0x7669D902 处(位于 Cam_MFC_Mea.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x00F5A240 处。
时间: 2023-12-18 17:25:42 浏览: 91
对于您提到的异常,这是一个由 OpenCV 库引起的异常。它表明您的程序在执行期间遇到了一个错误,并且错误是由于在内存地址 0x00F5A240 处引发的 cv::Exception。
要解决这个问题,您可以尝试以下几个步骤:
1. 确保您的代码正确地使用了 OpenCV 库。检查是否正确初始化和释放 OpenCV 对象,以及是否正确处理图像数据和函数调用。确保您的代码与 OpenCV 版本兼容。
2. 检查异常发生的上下文。查看错误消息中提供的额外信息,如函数调用栈和其他相关信息,以确定出错的原因。
3. 更新或重新安装 OpenCV 库。如果您使用的是旧版本的 OpenCV,尝试升级到最新版本,或者重新安装库以修复潜在的错误。
4. 检查您的计算机环境。确保您的计算机上没有其他冲突的软件或库,可能会干扰或影响 OpenCV 的正常运行。
相关问题
root = tk.Tk() root.withdraw() f_path = filedialog.askopenfilename() I0 = cv2.imread(f_path ) b, g, r = cv2.split(I0) m, n = r.shape flag = False mode = 0 def abc(x): global flag a = keyboard.KeyboardEvent(event_type='down', scan_code=2, name='1') b = keyboard.KeyboardEvent(event_type='down', scan_code=3, name='2') c = keyboard.KeyboardEvent(event_type='down', scan_code=4, name='3') if x.event_type == a.event_type and x.scan_code == a.scan_code: print("迭代式阈值选择算法") mode = 1 flag = True if x.event_type == b.event_type and x.scan_code == b.scan_code: print("大律算法") flag = True mode = 2 if x.event_type == c.event_type and x.scan_code == c.scan_code: print("三角算法") flag = True mode = 3 keyboard.hook(abc) if flag == False: time.sleep(5) # 等待5秒 if mode == 1: i_b = b.ravel() mea1_b = np.mean(i_b) mea = np.zeros(shape=(1, 1)) while True: mea1 = mea[0] i_b1 = np.where(i_b > mea1_b) mea2_b = np.mean(i_b[i_b1]) i_b2 = np.where(i_b < mea1_b) mea3_b = np.mean(i_b[i_b2]) mea1_b = (mea3_b + mea2_b) / 2 if mea1_b == mea1: break else: mea[0] = mea1_b I_B = b I_B[I_B > mea1_b] = 255 I_B[I_B < mea1_b] = 0 area_b = np.where(I_B == 255) print(mea1_b) i_r = r.ravel() mea1_r = np.mean(i_r) mea = np.zeros(shape=(1, 1)) while True: mea1 = mea[0] i_r1 = np.where(i_r > mea1_r) mea2_r = np.mean(i_r[i_r1]) i_r2 = np.where(i_r < mea1_r) mea3_r = np.mean(i_r[i_r2]) mea1_r = (mea3_r + mea2_r) / 2 if mea1_r == mea1: break else: mea[0] = mea1_r I_R = r I_R[I_R > mea1_r] = 255 I_R[I_R < mea1_r] = 0 area_r = np.where(I_R == 255) I_Rx = area_r[0] I_Ry = area_r[1] print(mea1_r)哪里出现了问题
在函数 `abc(x)` 中,变量 `mode` 在函数内部被赋值,但没有使用 `global` 声明为全局变量。因此,在后面的条件语句中,`mode` 始终为 0,导致程序一直执行 `mode == 1` 的分支,而不是根据用户输入的按键执行相应的阈值选择算法。解决方法是在函数 `abc(x)` 中,将 `mode` 声明为全局变量,即在函数开头加上 `global mode`。
i_b = b.ravel() mea1_b = np.mean(i_b) mea = np.zeros(shape=(1,1)) while True: mea1 = mea[0] i_b1 = np.where(i_b>mea1_b) mea2_b = np.mean(i_b[i_b1]) i_b2 = np.where(i_b<mea1_b) mea3_b = np.mean(i_b[i_b2]) mea1_b = (mea3_b+mea2_b)/2 if mea1_b == mea1: break else: mea[0] = mea1_b I_B = b I_B[I_B>mea1_b] = 255 I_B[I_B<mea1_b] = 0 area_b = np.where(I_B==255) print(mea1_b) i_r = r.ravel() mea1_r = np.mean(i_r) mea = np.zeros(shape=(1,1)) while True: mea1 = mea[0] i_r1 = np.where(i_r>mea1_r) mea2_r = np.mean(i_r[i_r1]) i_r2 = np.where(i_r<mea1_r) mea3_r = np.mean(i_r[i_r2]) mea1_r = (mea3_r+mea2_r)/2 if mea1_r == mea1: break else: mea[0] = mea1_r I_R = r I_R[I_R>mea1_r] = 255 I_R[I_R<mea1_r] = 0 area_r = np.where(I_R==255) I_Rx = area_r[0] I_Ry = area_r[1] print(mea1_r)
这段代码是在进行图像处理,主要是对输入的图像进行二值化处理,将图像中的像素值分成两部分,一部分为0,一部分为255。代码中采用的方法是Otsu算法,通过计算图像中像素值的均值,进而求出一个阈值,将像素值分成两部分。具体来说,代码中首先将图像中的像素值展平为一个一维数组,然后求出该数组的均值。接下来,利用一个循环不断迭代求出新的均值,直到均值不再发生变化为止。然后,将像素值大于均值的像素值赋值为255,小于均值的像素值赋值为0。最后,打印出均值。
其中,对于图像中的红色通道和蓝色通道,分别进行了上述操作,并分别得到了二值化处理后的图像中像素值为255的坐标。
阅读全文