1) Функция выйдет при первом замеченном штрих-коде - это так и задумано? Возможно, следует использовать yield?
2) При любом выходе из функции не забудьте сделать:
cap.release()
cv2.destroyAllWindows() # или конкретное окно
3) При выходе через break результат не возвращается - это так и задумано?
Задайте вопрос внятно, желательно с примером, что на входе и что на выходе.