cv2.BORDER_TRANSPARENT
时间: 2024-04-10 15:25:58 浏览: 307
cv2.BORDER_TRANSPARENT是OpenCV中的一个边界填充模式。它用于在图像边界上使用透明像素进行填充。这意味着在边界上的像素将保持透明,不会被填充或复制。这种填充模式通常用于处理具有透明通道的图像,例如PNG图像。
以下是一个使用cv2.BORDER_TRANSPARENT进行边界填充的示例代码:
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.png', cv2.IMREAD_UNCHANGED)
# 定义边界填充参数
top = 10
bottom = 10
left = 10
right = 10
# 使用cv2.BORDER_TRANSPARENT进行边界填充
padded_image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_TRANSPARENT)
# 显示原始图像和填充后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Padded Image', padded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码将读取名为'image.png'的图像,并在图像的上、下、左、右四个边界上使用透明像素进行填充。填充后的图像将显示原始图像及其周围的透明边界。
相关问题
def warp_im(im, M, dshape): output_im = numpy.zeros(dshape, dtype=im.dtype) # cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue ]]]])-->dst cv2.warpAffine(im, M[:2], (dshape[1], dshape[0]), dst=output_im, borderMode=cv2.BORDER_TRANSPARENT, flags=cv2.WARP_INVERSE_MAP) return output_im
这是一个对图像进行仿射变换的函数,输入参数包括原始图像 im、仿射变换矩阵 M 和目标图像大小 dshape。函数主要步骤如下:
1. 创建一个与目标图像大小相同的全零数组 output_im,数据类型与输入原始图像相同。
2. 使用 OpenCV 中的 warpAffine 函数,对输入原始图像进行仿射变换。
3. 将仿射变换后的图像输出到 output_im 中,并将 output_im 作为函数返回值。
该函数中使用了 OpenCV 中的 warpAffine 函数,该函数可以对图像进行各种类型的仿射变换,包括旋转、平移、缩放、翻转等操作。函数中使用了 WARP_INVERSE_MAP 标志,表示使用反向变换矩阵进行仿射变换。同时,使用了 BORDER_TRANSPARENT 边界模式,表示在图像边界处填充透明像素。
cv::copyMakeBorder用法
cv::copyMakeBorder函数可以在图像的边缘添加边框。它有几个参数,具体如下:
```cpp
cv::copyMakeBorder(src, dst, top, bottom, left, right, borderType, value);
```
其中:
- src:输入图像
- dst:输出图像
- top、bottom、left、right:分别表示在上、下、左、右四个方向上要添加的边框像素数
- borderType:表示边框的类型,有以下几种选择:
- cv::BORDER_CONSTANT:添加常数边框,此时需要额外提供value参数,表示边框的像素值。
- cv::BORDER_REPLICATE:复制边缘像素,即将图像沿边缘的像素进行复制,直到边框像素数为止。
- cv::BORDER_REFLECT:对称复制边缘像素,即将图像沿边缘的像素进行对称复制,直到边框像素数为止。
- cv::BORDER_WRAP:环绕式边框,即将图像沿边缘的像素进行循环复制,直到边框像素数为止。
- cv::BORDER_REFLECT_101:对称复制边缘像素,但是第一个像素和最后一个像素不进行复制。
- cv::BORDER_TRANSPARENT:添加透明边框,此时需要使用alpha通道来控制透明度。
- value:当边框类型为BORDER_CONSTANT时,使用此参数指定边框像素值。
下面是一个简单的示例代码:
```cpp
cv::Mat src = cv::imread("input.jpg");
cv::Mat dst;
int top = 30, bottom = 30, left = 50, right = 50;
cv::copyMakeBorder(src, dst, top, bottom, left, right, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 255));
cv::imshow("Input", src);
cv::imshow("Output", dst);
cv::waitKey(0);
```
这段代码将在输入图像的上下左右四个方向分别添加30和50个像素的蓝色边框。
阅读全文