1

I'm using this code to detect green color in the image.

The problem is this iteration is really slow.

How to make it faster? If it is using numpy, How to do it in numpy way?

def convertGreen(rawimg):
width, height, channels = rawimg.shape
size = (w, h, channels) = (width, height, 1)
processedimg = np.zeros(size, np.uint8)
for wimg in range(0,width):
    for himg in range(0,height):
        blue = rawimg.item(wimg,himg,0)
        green = rawimg.item(wimg,himg,1)
        red = rawimg.item(wimg,himg,2)
        exg = 2*green-red-blue
        if(exg > 50):
            processedimg.itemset((wimg,himg,0),exg)

return processedimg
0

1 Answer 1

2

I would go for something like this (untested):

def convertGreen(rawimg):
    red, green, blue = rawimg[:,:,0], rawimg[:,:,1], rawimg[:,:,2]
    exg = 2*green - red - blue
    processedimg = exg.copy();
    processedimg[processedimg < 50] = 0

    return processedimg

The copy operation can actually be omitted, but I kept it to stay a bit more in line with the original code.

Note that in general programming questions are actually offtopic here, and more suitable for StackOverflow.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.