Need to mask the region of interest from RGB image
My job is to mask the hand gestures from the RGB image into a binary image. Only the hand gesture should be shown in the resultant image. I have coded so far
import cv2
import numpy as np
from PIL import Image, ImageCms
from skimage.draw import rectangle
im = image = cv2.imread("E:\JU_V2_DIGIT\RGB_Crop\RGB_P3_G7_5.png")
mask = np.ones(shape=im.shape[0:2], dtype="bool")
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
# blur the image
blur = cv2.blur(gray, (3, 3))
# binary thresholding of the image
ret, thresh = cv2.threshold(blur, 210, 255, cv2.THRESH_BINARY)
# ret, thresh = cv2.threshold(gray, 127, 255,0)
cv2.imshow("Thresholded",thresh)
# find contours
# contours, hierarchy = cv2.findContours(thresh,2,1)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# cc
cnt = sorted(contours, key=cv2.contourArea, reverse=True)
# ROI will be object with biggest contour
m = cnt[0]
print(m)
# draw contours and hull points
# for i in range(len(contours)):
color_contours = (0, 255, 0) # color for contours
color = (255, 255, 255) # color for convex hull
# Know the coordinates of the bounding box of the ROI
x, y, w, h = cv2.boundingRect(m)
print(x)
print(y)
print(w)
print(h)
rr, cc = rectangle(start=(y, y+h), end=(x, x+w-1))
print(rr)
mask[rr, cc] = False
# Apply the mask and display the result
im[mask] = 0
cv2.imshow(im)
cv2.waitKey(10)
It shows the following error and also the result is not got.
File "C:/Users/Shrouti/PycharmProjects/homography/Scorecard.py", line 39, in <module>
mask[rr, cc] = False
IndexError: index 256 is out of bounds for axis 1 with size 256
Why do you needed namespace
from skimage.draw import rectangle
The opencv do have api forcv2.rectangle
. If you do, you not will getting an error.I am a beginner in Python. Please will you assist me with how to do this?
I'm using Raspberry pi 4B, Debian Buster, Linux.