python - 如何修复此堆栈溢出错误(python)?
问题描述
我正在尝试计算图像补丁中相似颜色像素的数量。我正在尝试用 openCV 来做这件事并创建了一个函数来做到这一点。后来我发现openCV中有一个可用的函数可以做到这一点,但我很好奇它为什么会显示这个错误。
import cv2
img = cv2.imread('drops.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.resize(gray, (256, 256))
for i in range (256):
for j in range(256):
gray[i,j] = gray[i,j]//10
def flood(img, i, j, color):
m = len(img[0])
n = len(img)
if (i<0 or i>=m or j<0 or j>=n):
return 0
if (img[i,j]!=color):
return 0
if (img[i,j]==255): #Error here
return 0
img[i,j] = 255
return (1+flood(img, i+1, j, color) #Error here
+flood(img, i, j+1, color)
+flood(img, i-1, j, color)
+flood(img, i, j-1, color)
+flood(img, i-1, j-1, color)
+flood(img, i+1, j-1, color)
+flood(img, i-1, j+1, color)
+flood(img, i+1, j+1, color))
def count(img):
for i in range(256):
for j in range(256):
if(img[i,j]!=255):
print(flood(img,i,j,img[i,j]))
count(gray)
Error:
Fatal Python error: Cannot recover from stack overflow.
Current thread 0x00005294 (most recent call first):
File "E:\Coding\CBIR\images\CCV.py", line 24 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
File "E:\Coding\CBIR\images\CCV.py", line 36 in flood
解决方案
import cv2 as cv
from collections import Counter
from pathlib import Path
import os
from matplotlib import pyplot as plt
from sklearn.feature_extraction import image
from collections import Counter
p = Path("/content/gdrive/My Drive/Colab Notebooks/images/cats")
new_p = os.path.join(p,'cat.1.jpg')
im = cv.imread(new_p,cv.COLOR_RGB2BGR)
im = cv.resize(im,(150,150))
patches = image.extract_patches_2d(im, (50,50)) #you can add your own patches
new_list = patches[5].reshape(-1,3).tolist()
res = [str(i) for i in new_list]
print(Counter(res))
下面给出的图像输出
plt.imshow(im)
plt.imshow(patches[5])
推荐阅读
- javascript - 如何使这个通过 ID 更改输入元素的 JavaScript 函数具有通用性?
- javascript - 手动刷新vue页面时,如何保证之前传入的参数依然存在?
- javascript - 更改 mediaStreamObject 上的 MFCC 顺序
- javascript - 以数字之间的字符开头和结尾的正则表达式
- autohotkey - activex 停止为所有脚本工作并给出“无法创建控制”错误
- postgresql - 跟踪源表中的更改并加载到历史表
- python - 映射值的更快方法 - 熊猫
- c++ - 非类型模板参数的自定义推导指南
- sql - BigQuery 正则表达式从字符串中删除/替换文本列表
- android - Kotlin vararg:用于一个简单的函数,它返回一些垃圾