python - 在opencv python中将边界应用于我的图像
问题描述
这是我试图为文件夹中的图像赋予正确形状但无法获得完美结果的图像。以下是一种类型的示例:
以下是我为包含此类图像的文件夹所做的编码:
''''代码''''
import cv2
import numpy as np
import glob
path = r'C:\Users\User\Desktop\A\*.jpg'
def k_function(image,k):
z= image.reshape((-1,4))
z=np.float32(z)
criteria = (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret,label,center=cv2.kmeans(z,k,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((image.shape))
return res2
def noise_function(image):
kernel = np.ones((2, 2), np.uint8)
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE,
kernel, iterations = 2)
bg = cv2.dilate(closing, kernel, iterations = 1)
dist_transform = cv2.distanceTransform(closing, cv2.DIST_L2, 0)
ret, fg = cv2.threshold(dist_transform, 0.02
* dist_transform.max(), 255, 0)
return fg
def filling(thresh):
im_floodfill = thresh.copy()
h, w = thresh.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)
cv2.floodFill(im_floodfill, mask,(60,60),255);
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
n = thresh | im_floodfill_inv
return n
for i, img in enumerate(glob.glob(path)):
img1 = cv2.imread(img)
n = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
b= k_function(n,2)
nm, thresh1 = cv2.threshold(b, 127, 255, cv2.THRESH_BINARY_INV);
fill = filling(thresh1)
noise = noise_function(fill)
cv2.imwrite(r'C:\Users\User\Desktop\New folder\image{}.jpg'.format(i),noise)
解决方案
尝试使用copyMakeBorder
来制作边框。看起来您正在尝试使用floodFill
,但我从未弄清楚它应该如何工作。
import cv2
image = cv2.imread('elbow.png')
image = cv2.copyMakeBorder(image, 10, 0, 0, 10, cv2.BORDER_CONSTANT)
cv2.imwrite('elbow_border.png', image)
肘部.png:
肘部边框.png:
推荐阅读
- event-handling - ZK 显示进度百分比
- python - 为什么列表级联中字典中的值在按索引更改值后会更新
- python - Pandas & fillna 基于组
- javascript - MaterialUI,如何覆盖嵌套 MUI 组件的样式?
- java - Groovy 和 grails 休眠只加载一次子对象
- qt - 矩形内的 QML 包装委托
- ios - 如何使用自动布局来实现以下布局?
- typescript - 如何使用 API 中的数据在离子选择中设置条件默认值
- android - 从 firebase 存储中获取多个下载 URL 并将它们保存到 firebase firestore
- python - 使用 sqlalchemy 在 python3 中解析 hstore