在 openCV for python 中遍历色彩空间



我正在尝试制作一个简单的程序,向我展示视频的第一帧在转换为openCV中可用的不同色彩空间时的样子。

我正在尝试使用这样的迭代器:

for item in flags:
arg = 'cv2.' + str(item)
newCs = cv2.cvtColor(frame, arg)
cv2.imshow('newCs', newCs)
# if I press no, destroy
if cv2.waitKey(0) & 0xFF == ord('n'):
cv2.destroyAllWindows()
# if I press yes, save and destroy
if cv2.waitKey(0) & 0xFF == ord('y'):
filename = str(item) + '.jpg'
cv2.imwrite(filename, newCs)
cv2.destroyAllWindows()

其中 'flags' 是一个包含所有标志(如 'COLOR_BGR2HSV' 的数组(,arg 成功返回一个字符串,看起来像您在函数中手动输入的标志,例如。'CV2.COLOR_BGR2HSV'

这个程序返回一个错误,说它期待一个 int 代替 'arg'

这是因为我想做的事情是不可能的,还是有办法做到这一点?

谢谢

错误提示,即cv2.cvtColor()的第二个参数,必须int告诉方法需要调用哪个转换公式的代码。并且您正在尝试在需要int的地方传递一个str值。

为什么要将COLOR_BGR2HSV作为str存储在列表中,然后将其与"cv2."连接起来以使情况更加复杂。您可以简单地创建一个列表作为color_configs = [cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, ...]然后迭代它以完成工作。

但是,如果您无法更改该列表,那么有一种黑客方法可以做同样的事情,我不建议您首先遵循它。但是您可以使用eval,采取适当的预防措施并清理字符串输入,然后再调用eval

for item in flags:
mode = 'cv2.' + str(item)
newCs = cv2.cvtColor(frame, eval(mode))

最新更新