我正在做一个图像处理特征提取。我有一张鸟的照片,在这张照片里,我必须提取鸟的区域,并告诉它有什么颜色。我用精明的特征提取方法来提取鸟的边缘。
如何只提取鸟的区域并使背景变成蓝色?
openCv解决方案也应该很好.

import skimage
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import os
filename = os.path.join(os.getcwd(),'image\image_bird.jpeg')
from skimage import io
bird =io.imread(filename,as_grey=True)
plt.imshow(bird)

from skimage import feature
edges = feature.canny(bird,sigma=1)
plt.imshow(edges )

实际的鸟类图像可以从鸟链中获取
发布于 2018-09-04 13:55:26
发布于 2018-09-07 15:09:57
根据本文,https://www.pyimagesearch.com/2016/04/11/finding-extreme-points-in-contours-with-opencv/和这个问题CV -提取两幅图像的差异
我编写了一些python代码如下所示。正如我的前任所说,这也远不是完美的。此代码的主要缺点是要手动设置常量值: minThres (50)、maxThres(100)、扩展迭代计数和腐蚀迭代计数。
import cv2
import numpy as np
windowName = "Edges"
pictureRaw = cv2.imread("bird.jpg")
## set to gray
pictureGray = cv2.cvtColor(pictureRaw, cv2.COLOR_BGR2GRAY)
## blur
pictureGaussian = cv2.GaussianBlur(pictureGray, (7,7), 0)
## canny edge detector - you must specify threshold values
pictureCanny = cv2.Canny(pictureGaussian, 50, 100)
## perform a series of erosions + dilations to remove any small regions of noise
pictureDilate = cv2.dilate(pictureCanny, None, iterations=20)
pictureErode = cv2.erode(pictureDilate, None, iterations=5)
## find the nozero regions in the erode
imask2 = pictureErode>0
## create a Mat like pictureRaw
canvas = np.full_like(pictureRaw, np.array([255,0,0]), dtype=np.uint8)
## set mask
canvas[imask2] = pictureRaw[imask2]
cv2.imwrite("result.png", canvas)https://stackoverflow.com/questions/52153979
复制相似问题