📅  最后修改于: 2021-01-07 06:32:16             🧑  作者: Mango
在本教程中,我们将学习与图像有关的基本操作。我们将讨论以下主题。
我们可以通过其行和列坐标来检索像素值。它返回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
有时,我们需要处理图像的某些区域。正如我们在上一教程中讨论的那样,面部检测已涵盖了整个过程。当获得一张脸时,我们只选择脸部区域并在其中搜索眼睛,而不是搜索整个图像。由于眼睛始终在脸上,无需搜索整个图像,因此它可以提高准确性和性能。
在上图中,如果需要选择球。我们只需要选择球区域。
图像的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-表示输入图像。
上,下,左,右-定义边框宽度,以相应方向上的像素数为单位。
borderType-定义要添加的边框类型。边框可以是以下类型。
价值-边框颜色,如果边框类型为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()
cvtColor用于将图像从一种颜色空间转换为另一种颜色空间。语法如下:
cv2.cvtColor(src, dst, code)
src-用于输入图像:8位无符号。
dst-用于显示图像作为输出。输出图像的大小和深度将与输入图像相同。
代码-颜色空间转换代码。
考虑以下示例:
# 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)
输出: