1. 磐创AI-开放猫官方网站首页
  2. Medium

用OpenCV-Python进行图像处理


图像处理是一件令人着迷的事情。在花了一些时间在这上面之后,我意识到你在第三方工具的帮助下所做的所有图像编辑都可以用OpenCV以及更多的工具来完成。在OpenCV的帮助下,你的相机应用程序应用的许多特殊效果可以很容易地完成,只需很少的几行代码。

这是我为描述使用OpenCV执行的最常见操作所做的一次小尝试。

首先介绍一下OpenCV?EUROUE?

OpenCV中的CV代表“EUROœ计算机视觉”、“EURO�”和“OPEN”,从这个意义上讲,它就是“EUROœ开源EURO�”。所以OpenCV是开源的计算机视觉。OpenCV是用C++编写的,但不用担心,它有Python、MATLAB、Java等的包装器。

安装

在Linux中安装非常简单。如果您只想安装用于python的OpenCV(在我们的示例中就足够了),请使用以下命令:

pip3 install opencv-python

这就是-Euro™就是这样!!你现在可以开始玩你的图像了

读/写图像

通过™快速读写图片:

import cv2
#Reading
input_image = cv2.imread("/path/to/input/image")
#perform some operations on image. Suppose you get 'converted_image'
#Writing
cv2.imwrite("/path/to/output/image",converted_image)

一些常见操作

  • 转换为灰度

在执行图像文档的文本提取或OCR时,灰度图像非常有用。OCR引擎在灰度图像而不是彩色图像上执行得非常好。

gray_image = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)

以下是输入和输出图像的外观:

这里需要注意的一点是,OpenCV中的彩色图像(BGR)在内存中表示为三维数组(N X M X 3)。灰度图像被表示为2维阵列(n×m)。您可以通过行和列坐标访问像素值。对于bgr图像,它返回一个由Blue、Green和Red值组成的数组。对于灰度图像,仅返回相应的强度。

#shape is used to get the dimensions of the image
print (input_image.shape)
print (gray_image.shape)
#This will return [Blue, Green, Red] values of pixel at 50th row and 80th column
bgr_px = input_image[50,80]

  • 阈值化

在阈值处理中,根据阈值为图像的每个像素分配一个值。如果像素值小于阈值,则设置为0,否则设置为最大值(通常为255)。阈值通常在灰度图像上执行,以将其转换为二进制图像(仅包含0和255个像素值)。

ret, thresh1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
cv2.imwrite("thresh.png",thresh1)


阈值分割用于区分图像的明暗部分。它通常在对图像进行OCR之前使用,也用于图像去模糊。

  • 反转

反转仅仅意味着反转像素值。通常对二值图像进行反转,反转后,白色像素将被转换为黑色,黑色像素将被转换为白色。我们可以使用OpenCV的BITBLE_NOT函数来反转图像:

image_inv=cv2.bitwise_not(Input_Image)

  • 模糊或平滑
  • 您可能想知道模糊或平滑清晰图像的需要是什么。虽然模糊在您通过相机捕捉的图像中是不受欢迎的,但是它在图像处理中非常有用。™是非常有用的。
  • 简单地说,模糊图像可以减少图像中的噪音。
  • 平滑或模糊是计算机视觉和图像处理中最常见的预处理步骤之一。
  • 通过在应用边缘检测或阈值等技术之前平滑图像,我们能够减少高频内容的数量,如噪声和边缘(即图像的“œDetail”和“�”)。
  • 以下是执行平均模糊的语法:

blurImg=cv2.blur(input_image,(10,10))

  • 它只是取内核区域下所有像素的平均值,并替换中心元素。这里我们将内核大小定义为(10,10)。您可以在此处尝试不同的值并进行测试。
  • 您可以探索更多图像模糊技术。
  • 形态运算

形态操作是一组基于形状处理图像的操作。它们将结构元素或内核应用于输入图像并生成输出图像。最常见的两种形态学操作是侵蚀和扩张。

  • 侵蚀
  • 侵蚀会淡出前景对象的边界。
  • 内核在图像中滑动(就像在2D卷积中一样)。只有当内核下的所有像素都为1时,原始图像中的像素(1或0)才会被视为1,否则,它将被侵蚀(变为零)。
  • 它是用来削弱图像的特征的。
  • 它对消除小的白噪声很有用。

import cv2
import numpy as np

img = cv2.imread('input_img.png')
# Matrix of size 5 as the kernel
kernel = np.ones((5,5), np.uint8)
img_erosion = cv2.erode(img, kernel, iterations=1)
cv2.imwrite("eroded.png",img_erosion)

  • 扩张
  • 它是侵蚀的对立面。
  • 在这里,如果内核下至少有一个像素是-euro˜1-euro™,那么一个像素元素就是-euro˜1-euro™。
  • 因此它增加了图像中的白色区域,或者增加了前景对象的大小。
  • 在像去噪这样的情况下,侵蚀之后是膨胀。因为,侵蚀去除了白噪音,但也缩小了我们的物体。所以我们把它放大。因为噪音消失了,他们不会再回来了,但是我们的目标面积增加了。(™)
  • 它在连接对象的破碎部分时也很有用。

import cv2
import numpy as np


这些是使用OpenCV对图像进行的一些基本操作。希望你觉得它们有用!请在回复部分告诉我您的想法。会欣赏一些掌声ğŸ‘�

这篇文章最初发表在2021年6月25日的https://neemagaurav1996.github.io上。https://neemagaurav1996.github.io

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/27/%e7%94%a8opencv-python%e8%bf%9b%e8%a1%8c%e5%9b%be%e5%83%8f%e5%a4%84%e7%90%86/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息