What exactly is BGR color space?

RGB stands for Red Green Blue. Most often, an RGB color is stored in a structure or unsigned integer with Blue occupying the least significant “area” (a byte in 32-bit and 24-bit formats), Green the second least, and Red the third least. BGR is the same, except the order of areas is reversed. Red occupies … Read more

Python OpenCV2 (cv2) wrapper to get image size?

cv2 uses numpy for manipulating images, so the proper and best way to get the size of an image is using numpy.shape. Assuming you are working with BGR images, here is an example: In case you were working with binary images, img will have two dimensions, and therefore you must change the code to: height, … Read more

Negative RGB Values

A possible reason for 8-bit signed values for pixel calculation comes from the necessity to represent RGB colors in YUV, YCrCb or other modes with chrominance. The Chrominance channels are encoded as differences in Green-Blue and Green-Red or Green-Yellow, Red-Blue etc. to simplify the answer. This range has also negative values.

Removing all installed OpenCV libs

By default, when building OpenCV from source, it will place it’s output in /usr/local/lib and /usr/local/bin. Although, judging from your error messages, it looks like it placed the libraries in /usr/lib and the binaries in /usr/bin, so you might also check in there. You can also use the Linux find command. So, to find all … Read more

OpenCV houghLinesP parameters

Ok, I finally found the problem and thought I would share the solution for anyone else driven nuts by this. The issue is that in the HoughLinesP function, there is an extra parameter, “lines” which is redundant because the output of the function is the same: cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) This is … Read more

How does cv2.boundingRect() function of OpenCV work?

The cv2.boundingRect() function of OpenCV is used to draw an approximate rectangle around the binary image. This function is used mainly to highlight the region of interest after obtaining contours from an image. As per the documentation there are two types of bounding rectangles: Straight Bounding Rectangle Here a simple rectangle is drawn around the contour (ROI). As you … Read more

Why would cv2.COLOR_RGB2GRAY and cv2.COLOR_BGR2GRAY give different results?

RGB->gray conversion actually isn’t an average — different channels are weighed differently. Specifically: This is also mentioned in the documentation. Thus, it’s expected that RGB2GRAY and BGR2GRAY give different results. Regarding the discrepancy between sum-then-divide and divide-then-sum approaches, i.e. between and Recall that cv2.imread returns a uint8 numpy array. Thus, the latter operation (where all channels are combined … Read more