如何提取球门图像中的网?

2024-03-29 08:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面给出的图片中,什么是只保留网并将绿色变为黑色的好方法?你知道吗

我试过以下方法,但效果不好。你知道吗

img_file = os.path.join(data_dir, img_file_name)
img = cv2.imread(img_file)
plt.figure()
plt.imshow(img)


hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

sensitivity = 150
lower_white = np.array([0,0,255-sensitivity])
upper_white = np.array([255,sensitivity,255])

# Threshold the HSV image to get only white colors
mask = cv2.inRange(hsv, lower_white, upper_white)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(img,img, mask= mask)

enter image description here


Tags: and方法imageimgnppltmaskarray
1条回答
网友
1楼 · 发布于 2024-03-29 08:28:09

对不起C++,但它只是说明了想法:RGB & GT;HSV & GT;饱和通道的阈值-GT,带有饱和和值通道的掩模-GT;RGB。代码如下:

cv::Mat img = cv::imread("cMzGr.jpg");
cv::Mat hsv;
cv::cvtColor(img, hsv, cv::COLOR_BGR2HSV);
std::vector<cv::Mat> chans;
cv::split(hsv, chans);

cv::Mat mask;
cv::adaptiveThreshold(255 - chans[1], mask, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 9, 0);
cv::bitwise_and(mask, chans[2], mask);

std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(mask, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);

for (size_t i = 0; i < contours.size(); ++i)
{
    if (cv::contourArea(contours[i]) < 10)
    {
        cv::drawContours(mask, contours, i, cv::Scalar(0), cv::FILLED, cv::LINE_4, hierarchy);
    }
}


cv::bitwise_and(chans[1], mask, chans[1]);
cv::bitwise_and(chans[2], mask, chans[2]);
cv::merge(chans, hsv);
cv::cvtColor(hsv, img, cv::COLOR_HSV2BGR);

cv::imshow("mask", mask);
cv::imshow("res", img);

结果: enter image description here

相关问题 更多 >