Sum*_*eet 20 python opencv image-processing scikit-learn scikit-image
我正在进行图像处理特征提取.我有一张鸟的照片,我必须在那里提取鸟类区域并告诉它鸟的颜色.我使用canny特征提取方法来获取鸟的边缘.
如何只提取鸟类区域,使背景为蓝色?
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)
Run Code Online (Sandbox Code Playgroud)
from skimage import feature
edges = feature.canny(bird,sigma=1)
plt.imshow(edges )
Run Code Online (Sandbox Code Playgroud)
实际鸟类图像可以从鸟类链接中获取
根据这篇文章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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1971 次 |
最近记录: |