Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 2088

Why is the order of color channels in funtion copyMakeBorder in Python version not (b, g, r) but (r, g, b)?

$
0
0
As we all know, OpenCV uses a differnt order of color channels (b, r, g,) not (r, b, g) for a historical reason. But I find that in python version, the second parameter of cv.copyMakeBorder, namely 'value', uses (r, b, g) as its order of color channels, which is inconsistent with other APIs and confused me. So maybe there is a typo or a tiny mistake in the tutorial for Python [tutorial_py_basic_ops](https://docs.opencv.org/4.0.1/d3/df2/tutorial_py_basic_ops.html). The tutorial provides a code snippet as shown below to teach the usage of funtion cv.copyMakeBorder.
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv.imread('opencv-logo.png')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
The author names a variable called 'BLUE' and assigns [255, 0, 0] to it which is sensible in the first glance. Then the variable 'BLUE' is used in constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE) in order to add a pure blue border to img1. However, we get a pure red border at last which titled 'CONSTANT' in the bottom-right corner of the whole final result picture. ![the result](https://docs.opencv.org/4.0.1/border.jpg) So may I fork the github repository and replace the variable name 'BLUE' with 'RED' to keep semantic consistency of the tutorial?

Viewing all articles
Browse latest Browse all 2088

Trending Articles