I just drew two red circles with matplotlib,the first one’s radius is 0.25,the second is 0.5.There is no doubt that the ratio of the area of the former to the latter is 0.25.I have used the CV2 to count the red pixels of each circle in HSV(converted from RGB),However,the pixels of fomer is 8753,the latter is 29718,which means the ratio of the area is about 0.2945. Why this happened,and how do I solve this problem. Here is my code,sorry if my text is formatted incorrectly,I’m a fresh guy here.
from matplotlib.patches import Circle
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import numpy as np
import cv2
import numpy as np
fig = plt.figure();
ax = fig.add_subplot(111)
cir2 = Circle(xy=(0, 0), radius=0.25, color='red', alpha=1.0)
ax.add_patch(cir2)
plt.axis('scaled')
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
plt.axis('equal')
ax.set_aspect(1)
plt.savefig('testblueline{name1}.jpg'.format(name1='1'))
img_name="testblueline1.jpg"
img = cv2.imread(img_name)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#Gen lower mask (0-5) and upper mask (175-180) of RED
mask1 = cv2.inRange(img_hsv, (0,43,46), (10,255,255))
mask2 = cv2.inRange(img_hsv, (156,43,46), (180,255,255))
# Merge the mask and crop the red regions
mask = cv2.bitwise_or(mask1, mask2 )
output1 = cv2.bitwise_and(img, img, mask=mask)
# cv2.imshow("mask", mask)
# cv2.imshow("croped1", output1)
# cv2.waitKey()
tot_pixel = output1.size
red_pixel = np.count_nonzero(output1)
print("Red pixels: " + str(red_pixel))