个性化阅读
专注于IT技术分析

OpenCV图像基本操作

本文概述

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

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

访问和修改像素值

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

图像投资回报率(感兴趣区域)

有时, 我们需要处理图像的某些区域。正如我们在上一教程中讨论的那样, 人脸检测涵盖了整个场景。当获得一张脸时, 我们只选择脸部区域并在其中搜索眼睛, 而不是搜索整个图像。由于眼睛始终在脸上, 不需要搜索整个图像, 因此它可以提高准确性和性能。

OpenCV图像基本操作

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

分割和合并图像通道

图像的BGR通道可以在需要时分为其平面。然后, 各个通道可以再次从BGR图像合并回去。这可以通过以下方式完成:

b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))

or

b = img[:, :, 0]

注意:cv2.split()函数是一个慢函数。 NumPy索引非常有效, 应该尽可能使用它。

为图像制作边框

OpenCV提供cv2.copyMakeBorder()函数来在图像周围创建边框, 类似于相框。该函数的语法如下。

cv2.copyMakeBorder(src, top, bottom, left, right, border type)

参数:

src-表示输入图像。

顶部, 底部, 左侧, 右侧-定义相应方向上像素数的边框宽度。

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-用于显示图像作为输出。输出图像的大小和深度将与输入图像相同。

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

考虑以下示例:

# 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)

输出

OpenCV的cvtColor

赞(0)
未经允许不得转载:srcmini » OpenCV图像基本操作

评论 抢沙发

评论前必须登录!