OpenCV 图像上的基本操作

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

图像ROI(感兴趣区域)

有时候,我们需要处理图像的一些区域。如我们在之前的教程中讨论的人脸检测是在整张图片上进行的。当获得一个人脸时,我们选择只对人脸区域进行搜索眼睛,而不是搜索整张图像。这样可以提高准确度和性能,因为眼睛始终在脸上,无需搜索整个图像。

OpenCV 图像上的基本操作

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

分离和合并图像通道

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

输出:

OpenCV 图像上的基本操作

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程