我有一些图像,我想用OpenCV和python过滤掉黑色区域 . 问题是这些图像来自卫星镜头并且没有明显的边界 .
在上面添加的图像中,第一个是原始图像,而第二个是模糊版本,我对中间的小暗区感兴趣 . 最终,我希望将此区域标记为单个轮廓区域 .
我的主要问题似乎是当我使用OpenCV findContours函数时,我得到了很多小轮廓而不是一个(或两个)大轮廓 .
我是OpenCV的新手,所以任何帮助都会受到赞赏!
以下是我通过简单的管道获得的一些粗略结果:代码也是相当不言自明的
import cv2 import numpy as np def nothing(x): pass cv2.namedWindow('image') cv2.createTrackbar('high','image',0,255,nothing) cv2.createTrackbar('low','image',0,255,nothing) cv2.namedWindow('Edges') while(1): image = cv2.imread("PATH TO IMAGE HERE") imgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) high = cv2.getTrackbarPos('high', 'image') low = cv2.getTrackbarPos('low', 'image') edges = cv2.Canny(imgray, low, high) kernel = np.ones((8, 8), np.uint8) closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) cv2.imshow('Edges', closing) ret,thresh = cv2.threshold(closing,low,high,0) im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) largest_area = 0 largest_contour_index = 0 counter = 0 for i in contours: area = cv2.contourArea(i) if (area > largest_area): largest_area = area largest_contour_index = counter counter = counter + 1 cv2.drawContours(image, contours, largest_contour_index, (0,255,0), 1) cv2.imshow('image', image) k = cv2.waitKey(1) & 0xFF if k == 27: break
管道如下:
阅读流畅的图像
转换为灰度
应用形态学操作closing(8x8蒙版)
查找轮廓
找到最大的轮廓(区域明智)
1 回答
以下是我通过简单的管道获得的一些粗略结果:
代码也是相当不言自明的
管道如下:
阅读流畅的图像
转换为灰度
应用形态学操作closing(8x8蒙版)
查找轮廓
找到最大的轮廓(区域明智)