首页 > 解决方案 > 在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)

标签: pythonopencv

解决方案


尝试使用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:

在此处输入图像描述


推荐阅读