Я пытался читать изображения в формате JPEG с imread
из пакета cv2
.До сих пор, кроме этого, казалось бы, случайного выбора изображений для чтения, это было здорово.
Проблема в том, что, поскольку я храню все мои изображения из одного и того же источника в одной папке, по-видимому, imread
работал над несколькими изображениями, но не над другими без видимой причины.Я внимательно осмотрел и убедился, что все изображения работают нормально, одного и того же типа и т. Д. Однако, как и на скриншотах, которые я прилагаю ниже, только выбранные изображения дали разумные результаты, тогда как все остальные вернули None
.Точный код, который я здесь использовал:
img = cv2.imread(image,1) #most None
Может кто-нибудь любезно подсказать, что, возможно, пошло не так?Большое спасибо!
Мои коды в целом:
images = os.listdir(os.path.join(input_dir, folder))
os.chdir(os.path.join(input_dir, folder))
#index += 1
index_array = []
out = []
# a quick recursion of summing up nested lists
rec = lambda x: sum(map(rec, x)) if isinstance(x, list) else x
minLineLength = 20 ##? how to set these?
maxLineGap = 5 ##? how to set these?
for image in images:
print(image)
if image == ".DS_Store" or (not image.endswith(".jpeg")):
continue
else:
img = cv2.imread(image,1)
#cv2.cv.LoadImage(image,CV_LOAD_IMAGE_COLOR)## #Opening image
if img is None:
print("None")
continue
elif img is not None:
print("Pppppppppaaaaaaaaaaassssssssss!")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY);
edges = cv2.Canny(gray, 50, 120);
nedges = rec(edges.tolist())/255.0;
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength, maxLineGap)
if lines is None:
nlines = 0
elif lines is not None:
nlines = lines.shape[0]
img_blur = cv2.GaussianBlur(gray, (5, 5), 0)
cimg = cv2.cvtColor(img_blur, cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img_blur, cv2.HOUGH_GRADIENT, 1, 120, param1=100, param2=30, minRadius=0, maxRadius=0)
if circles is None:
ncircles = 0
elif circles is not None:
circles = np.uint16(np.around(circles))
ncircles = circles.shape[1]
gray_blur = cv2.normalize(img_blur, img_blur, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
ret, thresh = cv2.threshold(gray_blur, 230, 255, cv2.THRESH_BINARY_INV)
square_cnts = []
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, np.ones((5, 5), np.uint8))
tmpimage, contours, h = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#print("D")
cnt0 = contours[0]
tmp_h = h[::-1]
appr = []
npoly = []
for index, cnt in enumerate(contours[::-1]):
approx = cv2.approxPolyDP(cnt, 0.1*cv2.arcLength(cnt, True), True)
if approx is None:
continue
elif approx is not None:
appr.append(approx)
npoly.append(len(approx))
new = [nedges, nlines, ncircles, sum(npoly)*1.0/len(npoly)]
out.append(new) #Adding new image to array shape of (x, 3, 100, 100) where x is image number
index_array.append(image)