【发布时间】:2022-01-04 23:31:57
【问题描述】:
我正在使用 Basler 相机开发一个 4 的 GUI。在我的程序中,我面临两个导致 GUI 无法正常运行的问题。但是,主要目标是根据相机索引保存 4 张图像。我被告知使用多线程技术开发GUI,这些都是我遇到的问题。这些是代码:
def LiveThread(strIdx):
CamIdx = int(strIdx)
try:
panel[CamIdx] = None
image[CamIdx] = []
# Start Grabbing
camera[CamIdx].StartGrabbing(pylon.GrabStrategy_LatestImageOnly)
print("Cam",CamIdx,': Start Grabbing')
iterator = 0
while bLiveThraed[CamIdx]:
grabResult = camera[CamIdx].RetrieveResult(5000, pylon.TimeoutHandling_ThrowException)
if grabResult.GrabSucceeded():
image[CamIdx] = converter[CamIdx].Convert(grabResult) # Access the openCV image data
image[CamIdx] = image[CamIdx].GetArray() # change them to an array for easy access
if(image[CamIdx] != []):
image[CamIdx] = cv2.cvtColor(image[CamIdx], cv2.COLOR_BGR2RGB)
image[CamIdx] = cv2.resize(image[CamIdx], (345,270))
image[CamIdx] = ImageTk.PhotoImage(image = Image.fromarray(image[CamIdx]))
if panel[CamIdx] is None:
panel[CamIdx] = tk.Label(image=image[CamIdx])
panel[CamIdx].image = image[CamIdx]
panel[CamIdx].pack(side="left")
panel[CamIdx].place(x=(345*CamIdx)+(20*CamIdx)+20, y=100)
panel[CamIdx] = tk.Label(image=image[CamIdx])
panel[CamIdx].image = image[CamIdx]
panel[CamIdx].pack(side="bottom")
panel[CamIdx].place(x=(345*CamIdx)+(20*CamIdx)+20, y=400)
#cv2.imwrite('./trial/camera'+str(CamIdx)+str(iterator)+'.jpg', image[CamIdx])
#iterator +=1
else:
panel[CamIdx].configure(image=image[CamIdx])
panel[CamIdx].image = image[CamIdx]
else:
print("Error: ", grabResult.ErrorCode)
grabResult.Release()
except genicam.GenericException as e:
# Error handling
print("An exception occurred.", e.GetDescription())
- 不推荐使用的警告显示在下图中
- 执行
cv2.imwrite('./trial/camera'+str(CamIdx)+str(iterator)+'.jpg', image[CamIdx])后保存与其相机索引对应的每张图像(如相机00、相机10、相机20、相机30)的问题。下图给出了产生的错误。
生成的 GUI 如下图所示。
【问题讨论】:
-
请不要张贴代码图片或错误信息。它们很难阅读。发布实际文本。
-
很抱歉给您带来不便,但是当您单击图像时,您可以轻松阅读,没有任何问题。顺便说一句,不再重复了。
-
不要使用
[]作为哨兵。使用None。使用is None进行测试,而不是相等比较。
标签: python numpy opencv tkinter basler