Ask Your Question

Use cv::integral() on multi-channel image?

asked 2018-11-24 09:03:29 -0600

sazr gravatar image

Can you use cv::integral on a BGR Mat? I want to calculate the integral image for each channel. Do I need to split the channels and call cv::integral for each channel or can I just use the function with a 3 channel Mat?

I am currently using this utility class that helps but I'm not sure if its made to handle multichannel Mats?

edit retag flag offensive close merge delete


what are you trying to achieve here ? what is the context ?

berak gravatar imageberak ( 2018-11-24 09:21:41 -0600 )edit

@berak In a video frame I am sliding a window over a 3 channel image and inspecting the variance under that window. If its above a threshold I perform more operations. Integral images will provide a more efficient and faster way to achieve this than meanStdDev().

sazr gravatar imagesazr ( 2018-11-24 09:23:35 -0600 )edit

do you have to inspect many more than one window ?

checking integral images is cheap, but calculating them is terribly expensive. (do some profiling, you'll see.)

berak gravatar imageberak ( 2018-11-24 09:27:26 -0600 )edit

@berak, thats exactly what I am doing, reimplementing my algorithm using cv::integral instead of meanStdDev() to test if or how much frames per second increase I get.

sazr gravatar imagesazr ( 2018-11-24 09:29:24 -0600 )edit

oh sliding window (i missed that). that's enough checks to justify it, then ;)

berak gravatar imageberak ( 2018-11-24 09:31:31 -0600 )edit

@berak thanks, is that link to an integral image correctly handling/calculating the variance and mean for a 3 channel image? I get some weird results on 3 channel images (like numbers over 100 million).

sazr gravatar imagesazr ( 2018-11-24 09:35:41 -0600 )edit

no idea, how large your image is, and how you check the values

you can also use CV_64F as result type (if you suspect a int32 overflow)

maybe we need to see your code ?

berak gravatar imageberak ( 2018-11-24 09:46:31 -0600 )edit

1 answer

Sort by ยป oldest newest most voted

answered 2018-11-24 09:29:29 -0600

berak gravatar image

yes, it is possible to use cv::integral() with multiple channel images, -- the result will have as many channels as the input.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2018-11-24 09:03:29 -0600

Seen: 495 times

Last updated: Nov 24 '18