python - 注释不同的对象python
问题描述
我无法为不同的对象注释这是代码
import os
import matplotlib.pyplot as plt
import cv2
from matplotlib.widgets import RectangleSelector
from generate_xml import write_xml
# global constants
img = None
tl_list = []
br_list = []
object_list = []
# constants
image_folder = 'images'
savedir = 'annotations'
obj = 'Blight'
obj2 = 'Downy Mildew'
obj3 = 'Leaf Spot'
obj4 = 'Webworm'
obj5 = 'Aphids'
obj6 = 'Leafminers'
obj7 = 'Healthy'
def line_select_callback(clk, rls):
global tl_list
global br_list
global object_list
tl_list.append((int(clk.xdata), int(clk.ydata)))
br_list.append((int(rls.xdata), int(rls.ydata)))
object_list.append(obj)
object_list.append(obj2)
object_list.append(obj3)
object_list.append(obj4)
object_list.append(obj5)
object_list.append(obj6)
object_list.append(obj7)
def onkeypress(event):
global object_list
global tl_list
global br_list
global img
if event.key == 'q':
print (object_list.append(obj2))
write_xml(image_folder, img, object_list, tl_list, br_list, savedir)
tl_list = []
br_list = []
object_list = []
img = None
elif event.key == 'd':
print(object_list.append(obj3))
write_xml(image_folder, img, object_list, tl_list, br_list, savedir)
tl_list = []
br_list = []
object_list = []
img = None
def toggle_selector(event):
toggle_selector.RS.set_active(True)
if __name__ == '__main__':
for n, image_file in enumerate(os.scandir(image_folder)):
img = image_file
fig, ax = plt.subplots(1, figsize=(10.5, 8))
mngr = plt.get_current_fig_manager()
mngr.window.setGeometry(250, 40, 800, 600)
image = cv2.imread(image_file.path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
ax.imshow(image)
toggle_selector.RS = RectangleSelector(
ax, line_select_callback,
drawtype='box', useblit=True,
button=[1], minspanx=5, minspany=5,
spancoords='pixels', interactive=True,
)
bbox = plt.connect('key_press_event', toggle_selector)
key = plt.connect('key_press_event', onkeypress)
plt.tight_layout()
plt.show()
plt.close(fig)
当我运行代码时,我收到这样的错误
None
Traceback (most recent call last): File "C:\Users\User\Anaconda3\lib\site-packages\matplotlib\cbook\__init__.py", line 388, in process
proxy(*args, **kwargs) File "C:\Users\User\Anaconda3\lib\site-packages\matplotlib\cbook\__init__.py", line 228, in __call__
return mtd(*args, **kwargs) File "part6.py", line 53, in onkeypress
write_xml(image_folder, img, object_list, tl_list, br_list, savedir) File "C:\Users\User\Desktop\Disease-detection\generate_xml.py", line 11, in write_xml
image = cv2.imread(img.path) AttributeError: 'NoneType' object has no attribute 'path' None
解决方案
您的变量img
被读取为None
. 回溯告诉你这个
image = cv2.imread(img.path) AttributeError: 'NoneType' object has no attribute 'path' None
即使那行代码不是您编写的内容的一部分,您也可以(从回溯中)看到它源自
write_xml(image_folder, img, object_list, tl_list, br_list, savedir)
出于某种原因,您在None
那里作为第二个参数传递,看起来 openCV 和 Python 对此并不完全满意。
最有可能的起源None
来自你的onkeypress(event)
函数的结尾,我们得到img = None
ifevent.key
匹配q
或d
.
在第一次按q
或d
时,代码将运行良好,因为您已在img
中启动if __name__ == '__main__'
。但是,在第二次按键时,代码将引发错误(因为img
is now None
)。
您应该重新考虑程序的流程,例如img
在特定时间应该是什么。
推荐阅读
- angular7 - 如何根据标题名称而不是字段名称隐藏和显示 ag-grid 列
- php - 不使用 https:// 时,Laravel Session::token 会在每个请求中不断变化
- google-chrome-devtools - 当 html 在网页上动态更新时,如何保存生成的 html,例如,我可以将其与 diff 进行比较以进行调试?
- sed - 如何在单行中格式化多行数据,但使用 sed 用逗号分隔?
- merge - Powerquery中两个表的所有组合
- ios - 将分页 UICollectionView 高度调整为当前可见的 UICollectionViewCell
- php - 无法通过使用 PHP 调用类中的函数连接到数据库
- git - git pull 之后在 master 之前的本地分支
- r - 在 dplyr 1.0 中从 mutate_all 移动到 cross()
- python - 如何使用 Selenium 和 Python 从 HTML 中提取文本