Python-OpenCV 处理图像(二):滤镜和图像运算
生活随笔
收集整理的這篇文章主要介紹了
Python-OpenCV 处理图像(二):滤镜和图像运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0x01. 濾鏡
喜歡自拍的人肯定都知道濾鏡了,下面代碼嘗試使用一些簡單的濾鏡,包括圖片的平滑處理、灰度化、二值化等:
import cv2.cv as cvimage=cv.LoadImage('img/lena.jpg', cv.CV_LOAD_IMAGE_COLOR) #Load the image cv.ShowImage("Original", image)grey = cv.CreateImage((image.width ,image.height),8,1) #8depth, 1 channel so grayscale cv.CvtColor(image, grey, cv.CV_RGBA2GRAY) #Convert to gray so act as a filter cv.ShowImage('Greyed', grey)# 平滑變換 smoothed = cv.CloneImage(image) cv.Smooth(image,smoothed,cv.CV_MEDIAN) #Apply a smooth alogrithm with the specified algorithm cv.MEDIAN cv.ShowImage("Smoothed", smoothed)# 均衡處理 cv.EqualizeHist(grey, grey) #Work only on grayscaled pictures cv.ShowImage('Equalized', grey)# 二值化處理 threshold1 = cv.CloneImage(grey) cv.Threshold(threshold1,threshold1, 100, 255, cv.CV_THRESH_BINARY) cv.ShowImage("Threshold", threshold1)threshold2 = cv.CloneImage(grey) cv.Threshold(threshold2,threshold2, 100, 255, cv.CV_THRESH_OTSU) cv.ShowImage("Threshold 2", threshold2)element_shape = cv.CV_SHAPE_RECT pos=3 element = cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos, element_shape) cv.Dilate(grey,grey,element,2) #Replace a pixel value with the maximum value of neighboors #There is others like Erode which replace take the lowest value of the neighborhood #Note: The Structuring element is optionnal cv.ShowImage("Dilated", grey)cv.WaitKey(0)0x02. HighGUI
OpenCV 內建了一套簡單的 GUI 工具,方便我們在處理界面上編寫一些控件,動態的改變輸出:
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE) thresholded = cv.CreateImage(cv.GetSize(im), 8, 1)def onChange(val):cv.Threshold(im, thresholded, val, 255, cv.CV_THRESH_BINARY)cv.ShowImage("Image", thresholded)# 創建一個滑動條控件 onChange(100) #Call here otherwise at startup. Show nothing until we move the trackbar cv.CreateTrackbar("Thresh", "Image", 100, 255, onChange) #Threshold value arbitrarily set to 100cv.WaitKey(0)0x03. 選區操作
有事希望對圖像中某一塊區域進行變換等操作,就可以使用如下方式:
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg",3)# 選擇一塊區域 cv.SetImageROI(im, (50,50,150,150)) #Give the rectangle coordinate of the selected area# 變換操作 cv.Zero(im) #cv.Set(im, cv.RGB(100, 100, 100)) put the image to a given value# 解除選區 cv.ResetImageROI(im) # Reset the ROIcv.ShowImage("Image",im)cv.WaitKey(0)0x04. 運算
對于多張圖片,我們可以進行一些運算操作(包括算數運算和邏輯運算),下面的代碼將演示一些基本的運算操作:
import cv2.cv as cv#or simply import cvim = cv.LoadImage("img/lena.jpg") im2 = cv.LoadImage("img/fruits-larger.jpg") cv.ShowImage("Image1", im) cv.ShowImage("Image2", im2)res = cv.CreateImage(cv.GetSize(im2), 8, 3)# 加 cv.Add(im, im2, res) #Add every pixels together (black is 0 so low change and white overload anyway) cv.ShowImage("Add", res)# 減 cv.AbsDiff(im, im2, res) # Like minus for each pixel im(i) - im2(i) cv.ShowImage("AbsDiff", res)# 乘 cv.Mul(im, im2, res) #Multiplie each pixels (almost white) cv.ShowImage("Mult", res)# 除 cv.Div(im, im2, res) #Values will be low so the image will likely to be almost black cv.ShowImage("Div", res)# 與 cv.And(im, im2, res) #Bit and for every pixels cv.ShowImage("And", res)# 或 cv.Or(im, im2, res) # Bit or for every pixels cv.ShowImage("Or", res)# 非 cv.Not(im, res) # Bit not of an image cv.ShowImage("Not", res)# 異或 cv.Xor(im, im2, res) #Bit Xor cv.ShowImage("Xor", res)# 乘方 cv.Pow(im, res, 2) #Pow the each pixel with the given value cv.ShowImage("Pow", res)# 最大值 cv.Max(im, im2, res) #Maximum between two pixels #Same form Min MinS cv.ShowImage("Max",res)cv.WaitKey(0)總結
以上是生活随笔為你收集整理的Python-OpenCV 处理图像(二):滤镜和图像运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python-OpenCV 处理图像(一
- 下一篇: Python-OpenCV 处理图像(三