【发布时间】:2017-08-19 15:21:16
【问题描述】:
我正在研究 python - 在 Ubuntu 上打开 CV。 我是 python 的新手,我觉得我的编码没有优化。
最终目标是将像素颜色更改为 jpeg 图像。假设如果红色通道值
为此,我将 jpeg 转换为 numpy.array。 然后使用“for/in:”循环逐像素检查红色通道是否
我的代码:
import numpy
import cv2
img=cv2.imread('image.jpeg',1)
y=x=-1 # I use y and x as a counters.
#They will track the pixel position as (y,x)
for pos_y in img:
y=y+1; x=-1 #For each new column of the image x is reset to -1
for pos_x in pos_y:
x=x+1
b, g, r = pos_x # I get the blue, green and red color
# please note that opencv is bgr instead of rgb
if r < 255:
r = 255
pos_x = [b,g,r]
img[y,x] = pos_x
cv2.imshow('Image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
此代码有效。但是,我觉得既不优雅也不高效。
如何优化代码并提高效率?
【问题讨论】:
-
我的回答能解决你的问题吗?
-
您实际检查和更改子像素值的位置不应该是
r而不是v? -
克马里奥:是的,谢谢。请在您回答后查看我的评论 Paul Panzer:您是对的。我手动复制了代码并更改了变量的名称以使其更易于理解。已更正。
标签: python arrays numpy opencv image-processing