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

  • 访问像素值并修改它们
  • 访问图像属性
  • 设置图像区域
  • 拆分和合并图像
  • 更改图像颜色

访问和修改像素值

我们可以通过其行和列坐标检索像素值。它返回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]

访问图像属性

了解图像的大小是处理图像处理应用程序的一项良好实践。在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       :  4
Image Width        :  1
Number of Channels :  3
Image Size  : 12

图像ROI(感兴趣的区域)

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

4-1.png

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

拆分和合并图像通道

可以在需要时将图像的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)  

输出:

4-2.png

标签: OpenCV, OpenCV教程, OpenCV图像识别, OpenCV安装教程, OpenCV下载, OpenCV入门, OpenCV基础, OpenCV库, OpenCV学习, OpenCV指南, OpenCV教程中文版, OpenCV快速入门, OpenCV基础教程