【发布时间】:2018-02-07 04:12:58
【问题描述】:
我正在尝试减少图像中的噪点,目前正在运行此代码
import numpy as np
import argparse
import cv2
from skimage import morphology
# Construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True,
help = "Path to the image")
args = vars(ap.parse_args())
# Load the image, convert it to grayscale, and blur it slightly
image = cv2.imread(args["image"])
cv2.imshow("Image", image)
cv2.imwrite("image.jpg", image)
greenLower = np.array([50, 100, 0], dtype = "uint8")
greenUpper = np.array([120, 255, 120], dtype = "uint8")
green = cv2.inRange(image, greenLower, greenUpper)
#green = cv2.GaussianBlur(green, (3, 3), 0)
cv2.imshow("green", green)
cv2.imwrite("green.jpg", green)
cleaned = morphology.remove_small_objects(green, min_size=64, connectivity=2)
cv2.imshow("cleaned", cleaned)
cv2.imwrite("cleaned.jpg", cleaned)
cv2.waitKey(0)
然而,尽管使用了 remove_small_objects 函数,图像似乎并没有从“绿色”变为“已清理”。为什么会这样,我该如何清理图像?理想情况下,我只想隔离卷心菜的图像。
我的思考过程是在阈值化后去除小于 100 大小的像素,然后用模糊平滑图像并填充被白色包围的黑洞——这就是我在 matlab 中所做的。如果有人可以指导我获得与我的 matlab 实现相同的结果,那将不胜感激。感谢您的帮助。
编辑:更改代码时犯了一些错误,更新到现在的样子并显示 3 张图片
图片:
绿色:
干净:
我的目标是从 matlab 实现中得到如下图所示的内容:
【问题讨论】:
-
你没有显示“清理”的图像。
-
是的,抱歉,我在发布之前更改了代码。我把它编辑成我测试时的样子
-
只是作为一个建议:检测边缘并按照您想要的方式继续前进。在我的观察中,这很容易,因为目标与周围的色差非常好。