Имеется скрипт, который считает кол-во пикселей на фото. Используется для определения площади листовой пластинки. Применялся на убунте 12.04
Рабочий ноут приказал долго жить, а на новой машине (убунта 20.04) работать не хочет, хотя нужный пакет (Python-opencv) установлен.
Сам скрипт
Код: Выделить всё
import os
import cv2
#import matplotlib.pyplot as plt
import numpy as np
import random
cx0,cx1,cy0,cy1 = 50,100,50,100
scale = 0.2
for f in os.listdir("./in") :
img = cv2.imread("in/"+f)
img = img[cy0:-cy1,cx0:-cx1]
img_orig = cv2.resize(img,None,fx=scale, fy=scale, interpolation = cv2.INTER_CUBIC)
img = cv2.cvtColor(img_orig, cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img,(3,3),0)
ret,thresh = cv2.threshold(img,100,200,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
h, w = thresh.shape[:2]
cv2.line(thresh,(0,0),(0,h),(255,255,255),2)
cv2.line(thresh,(0,0),(w,0),(255,255,255),2)
cv2.line(thresh,(w,h),(0,h),(255,255,255),2)
cv2.line(thresh,(w,h),(w,0),(255,255,255),2)
cv2.imshow('t',thresh)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
contours = [cnt for cnt in contours if cv2.contourArea(cnt)>2500*scale*scale]
for cnt in contours:
cv2.drawContours(img_orig, [cnt], -1, (random.randint(0,255),random.randint(0,255),random.randint(0,255)), 2)
for cnt in contours :
mask = np.zeros(img.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
areas = [cv2.contourArea(cnt) for cnt in contours]
areas.sort()
areas.reverse()
print f, areas
cv2.imshow('image',img_orig)
cv2.waitKey(0)
cv2.destroyAllWindows()
Код: Выделить всё
File "leaf.py", line 40
print f, areas
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(f, areas)?
taras@taras:~$ python3.8 leaf.py >22.txt
File "leaf.py", line 40
print f, areas
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(f, areas)?