我收集了一组图片,展示了远洋地平线上或附近的船只。我试图创建一个图像,删除船舶(s)的形象,而留下了大部分的背景完好无损。我最初的尝试是用黑白扫描模糊图像的每一行和每一列,如果值超过某个阈值,则用行的中值替换其中的值:
colorImage= cv2.imread(path,1) # where path is the directory to my image
gray = cv2.cvtColor(colorImage, cv2.COLOR_BGR2GRAY)
gray= cv2.GaussianBlur(gray, (21,21), 0)
bkgd= gray
imageHeight, imageWidth= bkgd.shape
for row in range(0, imageHeight):
for column in range(0, imageWidth):
if bkgd[row, column] > 100:
bkgd[row, column]= int(np.median(bkgd[row]))
100是我选择的一个任意值,它与模糊黑白图像中天空的最小值非常相似,因此保留了来自海洋的所有噪声(用于将原始图像与船进行比较)。当天空中有云层发出的噪音时,这个过程会变慢并产生不稳定的结果。在cv2或其他库中有没有更好的方法来完成我的工作?你知道吗
好吧,在别人回答之前我就想出了一个解决办法,下面是我的想法。我用中间值替换每个像素是正确的,但是我使用了一些numpy数组魔法,只迭代行而不是行和列。我还将该方法应用于BGR中的彩色图像,而不是黑白图像:
如果有人有更好的,更有效的,或优雅的解决方案,我仍然希望接受教育。你知道吗
相关问题 更多 >
编程相关推荐