2

opencv-python 2 图像基本操作 - 一枚码农

 2 years ago
source link: https://www.cnblogs.com/yimeimanong/p/17250448.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

opencv-python 2 图像基本操作

图像的基本操作

获取并修改图像的像素值

可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝色,绿色,红色值的数组。对于灰度图像,仅返回相应的强度值。

image

可以用同样的方法修改像素点的像素值:

image
image

更好的像素获取和编辑方法:

image
获取图像的属性

图像属性包括行数,列数和通道数,图像数据类型,像素数等。
使用img.shape可以获取图像的形状。它返回一组行,列和通道的元组(如果图像是彩色的):
image
注意:如果图像是灰度图像,则返回的元组仅包含行数和列数,因此这是检查加载的图像是灰度还是彩色的一种很好的方法。

使用img.size获取的像素总数, img.dtype获取图像数据类型:
image

图像ROI

有时你需要对一幅图像的特定区域进行操作。例如我们要检测一副图像中眼睛的位置,我们首先应该在图像中找到脸,再在脸的区域中找眼睛,而不是直接在一整幅图像中搜索。这样会提高程序的准确性(因为眼睛总在脸上)和性能(因为我们在很小的区域内搜索)。 ROI 也是使用 Numpy 索引来获得的。
1.我们先在图像上创建一个目标区域
image

image

2.移动目标区域

image
image

图像通道的拆分与合并

有时您需要分别处理图像的B、G、R通道。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。

拆分有两种方式,cv.split()是一项代价高昂的操作(就消耗时间而言)。所以只有在你需要时才这样做。否则使用Numpy索引

image

合并用cv.merge()
image

假设你要将所有红色像素设置为零,则无需先拆分通道。使用Numpy索引更快:
image

image

制作图像边框(padding)

如果要在图像周围创建边框,比如相框,可以使用cv.copyMakeBorder()。它在卷积运算,零填充等方面有更多的应用。该函数需要以下参数:

  • src - 输入图像
  • top, bottom, left, right - 对应边界的像素数目。
  • borderType - 要添加那种类型的边界,类型如下:
  • cv2.BORDER_CONSTANT - 添加一个固定的彩色边框,还需要下一个参数(value)。
  • cv2.BORDER_REFLECT - 边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb
  • cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT - 跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
  • cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|abcdefgh|hhhhhhh
  • cv2.BORDER_WRAP - 不知道怎么说了, 就像这样: cdefgh|abcdefgh|abcdefg
  • value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT

image

image

其他边框demo

replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK