Python

※This article is based on Python 3.7.3

环境 [edit]

安装命令

pip install opencv-python

简单的例程 [edit]

import cv2 as cv
img = cv.imread("2.jpg")
cv.imshow("2", img)
cv.waitKey(0)
cv.destroyAllWindows()

图片处理 [edit]

灰度化与二值化 [edit]

图像灰度化

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  

图像二值化

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)  

图片降噪 [edit]

中值滤波 [edit]

中值滤波是一种简单而有效的去噪方法,特别适合去除椒盐噪声(随机黑白像素点)。它可以有效地保留图像的边缘信息和细节,但它也可能导致图像变得模糊,特别是在大尺寸滤波器的情况下。

import cv2

img = cv2.imread('image.jpg')
median = cv2.medianBlur(img, 5)
cv2.imshow('Median filter', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波 [edit]

高斯滤波器是一种线性滤波器,适用于去除高斯噪声(随机高斯分布的噪声)。它通过对周围像素的加权平均来减少噪声,并在去除噪声的同时保留图像的边缘信息。与中值滤波相比,它可以更好地控制模糊程度,但它不能有效地去除椒盐噪声。

import cv2

img = cv2.imread('image.jpg')
gaussian = cv2.GaussianBlur(img, (5,5), 0)
cv2.imshow('Gaussian filter', gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

双边滤波 [edit]

双边滤波是一种非线性滤波器,可以同时平滑像素的颜色和保留边缘信息。它可以去除高斯噪声和椒盐噪声,并且相对于其他滤波器,双边滤波器的效果更好。但是,双边滤波器需要更长的处理时间,并且可能会在图像中引入一些新的噪声。

import cv2

img = cv2.imread('image.jpg')
bilateral = cv2.bilateralFilter(img, 9, 75, 75)
cv2.imshow('Bilateral filter', bilateral)
cv2.waitKey(0)
cv2.destroyAllWindows()

小波变换 [edit]

小波变换可以分解图像成不同频率的细节信息,从而可以选择性地去除噪声。小波变换通常用于处理高斯噪声和其他复杂的噪声类型。小波变换可以同时保留图像的边缘和细节信息,但它可能会引入一些新的噪声,并且需要更长的处理时间。

import cv2
import pywt

img = cv2.imread('image.jpg', 0)
coeffs = pywt.dwt2(img, 'haar')
cA, (cH, cV, cD) = coeffs
cv2.imshow('Wavelet denoising', pywt.idwt2((cA, (None, None, None)), 'haar'))
cv2.waitKey(0)
cv2.destroyAllWindows()

调用USB摄像头 [edit]

设置相机id之后还要设置一下分辨率,否则某些相机,第二次打不开画面

cap = cv2.VideoCapture(video,cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)  # 设置分辨率
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

while cap.isOpened():
    ...

#使用完后,要释放
cap.release()
cv2.destroyAllWindows()

有个USB摄像头不使用 cv2.CAP_DSHOW 参数会报错

CvCapture_MSMF::grabFrame videoio(MSMF): can't grab frame. Error: -2147483638

コメント:



(画像の文字列を入力して下さい)

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS