Python技术迷

OpenCV教程-OpenCV图像的基本操作

整理:python技术迷

在本教程中,我们将学习与图像相关的基本操作。我们将讨论以下主题。

  • 访问像素值并修改它们

  • 访问图像属性

  • 设置图像区域

  • 拆分和合并图像

  • 更改图像颜色

访问和修改像素值

我们可以通过其行和列坐标检索像素值。它返回BGR图像的蓝色、绿色、红色值的数组。对于灰度图像,它返回相应的强度值。首先,我们需要加载BGR图像。
import numpy as np  import cv2  img = cv2.imread("C:\Users\DEVANSH SHARMA\cat.jpeg",1)  pixel = img[100,100]  print(pixel)
输出:
[190 166 250]

专属福利 

👉点击领取:最全Python资料合集

访问图像属性

了解图像的大小是处理图像处理应用程序的一项良好实践。在OpenCV中,图像通常存储在Numpy ndarray中。要获取图像的形状或大小,请使用ndarray.shape来查找图像的维度。然后,我们可以使用索引位置获取高度、宽度和通道数。

考虑以下示例:
import cv2  # read image  img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg',1)  # height, width, number of channels in image  height = img.shape[0]  width = img.shape[1]  channels = img.shape[2]  size1 = img.size  print('Image Dimension    : ',dimensions)  print('Image Height       : ',height)  print('Image Width        : ',width)  print('Number of Channels : ',channels)  print('Image Size  :', size1)
输出:
Image Dimension    :  (4, 1, 3)Image Height       :  4Image Width        :  1Number of Channels :  3Image Size  : 12

图像ROI(感兴趣的区域)

有时,我们需要处理图像的某些区域。正如在先前的教程中讨论的,面部检测是在整个图片上进行的。当获得面部后,我们只选择面部区域并在其中搜索眼睛,而不是搜索整个图像。这提高了准确性和性能,因为眼睛总是在脸上,不需要搜索整个图像。

Image

在上面的图像中,如果我们需要选择球,我们只需要选择球区域。

拆分和合并图像通道

可以在需要时将图像的BGR通道拆分为它们的平面。然后,可以再次从BGR图像中将单个通道合并在一起。可以通过以下方式完成:
b,g,r = cv2.split(img)  img = cv2.merge((b,g,r))
或
b = img[:,:,0]

注意:cv2.split()函数速度较慢。Numpy索引非常高效,如果可能的话应该使用它。

为图像制作边框

OpenCV提供cv2.copyMakeBorder()函数,用于在图像周围创建边框,类似于相框。函数的语法如下。
cv2.copyMakeBorder(src,top,bottom,left,right,border type)

参数:

  • src - 表示输入图像。

  • top, bottom, left, right - 在相应方向上定义边框宽度中的像素数。

  • borderType - 定义要添加的边框类型。边框可以是以下类型。

  • value - 如果边框类型为cv.BORDER_CONSTANT,则为边框的颜色。

考虑以下示例:
import cv2 as cv  import numpy as np  from matplotlib import pyplot as plt  BLUE = [255,0,0]  img1 = cv.imread(r'C:\User\DEVANSH SHARMA\flower.jpg',1)  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)  constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)  plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')  plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')  plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')  plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')  plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')  plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')  plt.show()

更改图像颜色

OpenCV cvtColor

cvtColor用于将图像从一种颜色空间转换为另一种颜色空间。以下是该函数的语法。
cv2.cvtColor(src, dst, code)

参数:

  • src - 用于输入图像的8位无符号整数。

  • dst - 用于显示输出的图像。输出图像的大小和深度将与输入图像相同。

  • code - 颜色空间转换代码。

考虑以下示例:
# importing cv2    import cv2    # path of the input image  path = (r'C:\Users\DEVANSH SHARMA\cat.jpeg')  # Reading an image in default mode   src = cv2.imread(path)   # Window name in which image is displayed   window_name = 'Image'   # Using cv2.cvtColor() method   # Using cv2.COLOR_BGR2GRAY color space for convert BGR image to grayscale  # conversion code   image = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY )   # Displaying the image    cv2.imshow(window_name, image)

输出:

Image

Image
 1

Image

热门推荐

Image