在imag中剔除黑色边框

2024-09-29 23:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要如果有一种方法,如何在这张图片的左右两侧裁剪出黑色部分image to crop[图像裁剪出黑色部分]。我想用openCV,python。我有一个问题就是要把曲线剪出来。谢谢你的帮助。在

https://i.stack.imgur.com/a8jt0.jpg


Tags: to方法https图像cropimagecomstack
2条回答

不能裁剪出图像的角。但你可以把它们变成透明的。您可以将图像转换为灰度,将这些区域的阈值设置为黑色,将其余区域设置为白色,并将其用作遮罩。将遮罩放入alpha通道,角点将是透明的。下面是一个使用Python/OpenCV的示例。在

输入:

enter image description here

import cv2
import numpy as np

# load image as grayscale
img = cv2.imread('retina.jpeg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold input image using otsu thresholding as mask and refine with morphology
ret, mask = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
kernel = np.ones((9,9), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

# put mask into alpha channel of image
result = img.copy()
result = cv2.cvtColor(result, cv2.COLOR_BGR2BGRA)
result[:, :, 3] = mask

# save resulting masked image
cv2.imwrite('retina_masked.png', result)

# display result, though it won't show transparency
cv2.imshow("RESULT", result)
cv2.waitKey(0)
cv2.destroyAllWindows()


enter image description here

图像本质上是一个像素数组,所以当你说裁剪图像时,我将其转换为从数组中删除元素。因此,为了从数组中删除某些元素,它的大小必须改变,因为我们都知道在C++中声明后数组大小不能改变。但是,您可以过滤所需的像素并将其复制到新数组中。我没有一个工作代码,但希望下面的代码能给你一个推动

for (int i = 0; i < image.rows; i++) { 

for (int j = 0; j < image.cols; j++) { 

    if (image.at<Vec3b>(i, j)[0] != 0 && image.at<Vec3b>(i, j)[1] != 0 && image.at<Vec3b>(i, j)[2] != 0) { /*Check if all the RGB pixels are not 0 (not black)*/
        /*TODO*/
        /*MOVE THIS PIXEL TO A NEW ARRAY*/
    }
}

}

相关问题 更多 >

    热门问题