Pyhon 使用simpleCV包

本人使用的是Ubuntu16.04,本人安裝simpleCV的教程放在上一個blog中,如果您需要可以點擊鏈接ubuntu 中安裝SimpleCV

本blog中所有的代碼都是經過本人實測、可用的。如果您覺得需要的話可以直接使用

1.使用simpleCV中的Camera,Display,Image拍攝照片和顯示照片


#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Camera, Display, Image
import time
#調用攝像機
cam=Camera()
#調用顯示
display=Display()
#把攝像機拍攝出來的照片轉換爲image
img=cam.getImage()
#顯示
img.save(display)
time.sleep(4)

2.在拍攝的照片中添加文字,並且將拍攝的照片保存到當前目錄中

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Camera,Display,Image
import time
def main():
    #調用攝像機
    cam = Camera()
    #調用顯示
    display = Display()
    #轉換成圖片
    img = cam.getImage()
    #圖片添加文字
    img.drawText("ai wo zhong hua")
    #圖片顯示
    img.save(display)
    time.sleep(5)
    #圖片保存到文檔中
    img.save("pic.jpg")

if __name__ == '__main__':
    main()

3.找到照片中的光斑

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image
import time
#選擇當前目錄下的pic.jpg照片
img = Image('pic.jpg')
#顯示照片
img.show()
time.sleep(10)
#找到光斑,默認值是256,但是一般情況下是找不到全白的地方,所以給一個相對閥值100
#閥值在文章後面還會有介紹
blobs = img.findBlobs(100)
print blobs

4.使用攝像頭拍攝顯示照片,或者拍攝一個固定大小圖片,添加的文字給定位置

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Camera,Display,Image
import time

cam = Camera(0)#Camera(1),就是調用第二個攝像頭
#圖片的顯示
cam.getImage().show()
time.sleep(1)

#使用第一個攝像頭,拍攝大小爲640,480
cam0 = Camera(0,{ "width": 640, "height": 480 })
img0 = cam.getImage()
#圖片中添加文字
img0.drawText('I am Camera ID 0',0,0)#後面的數字就是定文字在哪裏寫
img0.show()
time.sleep(3)

'''cam1 = Camera(1) #只有一個攝像頭的時候會報錯
img1 = cam1.getImage()
img1.drawText('pandayidun')
img1.show()
time.sleep(4)
'''

5.使用攝像頭拍攝視頻

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Camera,Display,Image
import time
cam = Camera()#Camera(1),就是調用第二個攝像頭
cam.live()

6.保存拍攝的圖片,並且添加文字。文字顏色隨機

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Camera,Display,Image,Color
import time

cam = Camera()#Camera(1),就是調用第二個攝像頭
display = Display()
img =cam.getImage()
#第一張顯示的照片添加文字
img.drawText('good good study dayday up',color = Color().getRandom())
img.save(display)
time.sleep(1)
counter = 0
while not display.isDone():
    img = cam.getImage()
    img.save(display)
    if display.mouseLeft:
        #保存圖片
        img.save('ps'+str(counter)+'.jpg')
        #給文字添加文字,文字顏色隨機 或者指定顏色 color = Color.RED
        img.drawText('photo saved.',color = Color().getRandom())
        img.save()
        #設置睡眠時間,相當於可以定時拍照
        time.sleep(1)
        counter = counter + 1 

7.將圖片使用不同格式保存

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
img = Image("chicago.png")
img.save()
# 保存成jpg格式
img.save("chicago.jpg")
# 重新以jpg格式保存
img.save()

8.將圖片進行放大,縮小

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
from encodings.punycode import adapt

img  = Image('ps1.jpg')
#將照片寬高放大2倍
bigImg = img.resize(img.width*2,img.height*2)
bigImg.show()
time.sleep(1)
#圖像的縮放因子爲5,放大五倍
bigImg1 = img.scale(3)
bigImg1.show()
time.sleep(1)
#使用adaptiveScale(),在保持圖像長寬比的情況下改變圖像大小
#注意括號裏面放的是元組,不是單獨的x,y
adaptImg = img.adaptiveScale((img.width*2,img.height))
adaptImg.show()
time.sleep(1)
#embiggen()函數,縮放函數,需要設置三個參數
#一個是元組,設置圖像放大之後的尺寸
#一個是圖像填充區域的顏色,默認是黑色
#一個元組,用於設置原始圖像在新畫布中的位置,默認劇中
emb = img.embiggen((350, 400), Color.GREEN, (0, 0))
emb.show()
time.sleep(10)

9.將圖片進行裁剪

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time

img  = Image('ps1.jpg')
# 從左上角(50, 5)開始裁剪一個200x200的區域,這裏是裁一個1/4的圖片出來
cropImg = img.crop(200,200,img.width/2,img.height/2)
cropImg.show()
time.sleep(1)

#有時候設定感興趣區域(剒剏剉)的中心點比左上角更方便。這時只需要在添加一個參數,centered= true
cropImg1 = img.crop(img.width/2, img.height/2, img.width/2, img.height/2, centered=True)
cropImg1.show()
time.sleep(1)
#如前所述剓剩剭剰剬剝剃剖可以沿着一個斑塊進行檢測
blobs = img.findBlobs()
img.crop(blobs[-1]).show()
time.sleep(2)
# 裁剪圖像從(50,5)開始款200個像素,高200個像素
cropImg2 = img[50:250,5:205]
cropImg2.show()
time.sleep(3)

10.將圖片進行旋轉和裁剪後旋轉

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time

img  = Image('ps1.jpg')
#以中心點爲中心旋轉45度
rot = img.rotate(45,point=(img.width/2,img.height/2))
rot.show()
time.sleep(1)
#rotate旋轉後有部分會被裁剪,添加參數fixed 爲False後就不會被裁剪
rot1 = img.rotate(45,point=(img.width/2,img.height/2),fixed =False)
rot1.show()
time.sleep(1)
#旋轉之後還可以進行縮放
rot2 = img.rotate(45,point=(img.width/2,img.height/2),fixed =False,scale = 0.5)
rot2.show()
time.sleep(3)

11.將圖片進行翻轉,扭曲和切片

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color,Camera,Display
import time

img  = Image('ps2.jpg')
#圖像進行水平或垂直翻轉。函數flipHorizontal()和flipVertical()
flip = img.flipHorizontal()
flip.drawText('good good study')
flipa = flip.scale(4) #這裏相當於重新擴展出了另外一個照片
flipa.show()
time.sleep(1)
flip.show()
time.sleep(1)

#扭曲和切變
img1 = Image('ps0.jpg')
corners = [(0,0),(450,0),(500,600),(50,600)]
straight = img.shear(corners)
straight.show()
time.sleep(4)

12.讓圖片進行二值化,膨脹,腐蝕

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
#進行圖片的二值化,就是隻有黑白,沒有其他顏色
img1  = Image('ps1.jpg')
imgBin = img1.binarize()
imgBin.show()
time.sleep(0.5)
#未處理的圖片
img  = Image('ps2.jpg')
# 使用默認的黑白色
otsu = img.binarize()
# 設置一個低的閾值的黑白色圖片
low = img.binarize(75)
# 設置一個高的閾值的黑白色圖片
high = img.binarize(125)
#縮小出四個大小爲之前1/4的圖片
img = img.resize(img.width/2, img.height/2)
otsu = otsu.resize(otsu.width/2, otsu.height/2)
low = low.resize(low.width/2, low.height/2)
high = high.resize(high.width/2, high.height/2)
#上面是原圖和默認黑白圖
top = img.sideBySide(otsu)
#下面是低值和高值的黑白圖
bottom = low.sideBySide(high)
#下面的放下面去
combined = bottom.sideBySide(top, side="top")
combined.show()
time.sleep(0.5)

#膨脹,任何一個背景像素(黑色),如果他與任何一個對象像素(白色)相接觸,那麼這個
#像素點就會變成白色。 這會使圖像變大,將相鄰的對象連在一起。 腐蝕的
#作用剛好相反。 所有與背景像素(黑色)有直接接觸的對象像素(白色)
#都回變成黑色。 這會使對象變小,甚至可以將連在一起的大對象分割成幾個小的對象。
img2  = Image('ps2.jpg').scale(0.5)
imgBin2 = img2.binarize()
#腐蝕相鄰的,白變黑  裏面帶數字就是腐蝕幾次 例如erode(3)就是腐蝕三次
erodeImg = imgBin2.erode()
#膨脹 相鄰白的黑點變成白
dilateImg = imgBin2.dilate()
side1 = erodeImg.sideBySide(img2)
side2 = side1.sideBySide(dilateImg)
side2.show()
time.sleep(3)

13.將圖片的顏色進行分割,取某點的顏色

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
img1  = Image('snake.png')
#得到某個點的色素
print img1.getPixel(100,100)
#轉換成Hsv模式的圖片
hsv = img1.toHSV()
hsv.show()
print hsv.getPixel(100,100)
#轉換成RGB模式的圖片
rgb = img1.toRGB()
hsv.save('snake2.png')
print rgb.getPixel(100,100)
gray = img1.grayscale()
print gray.getPixel(100,100)
#在一個框中顯示所以圖片

contain1 = img1.sideBySide(hsv)
contain2 = rgb.sideBySide(gray)
combox = contain1.sideBySide(contain2,'top')
combox.show()
time.sleep(5)

14.圖片顏色的加減乘除,特別注意先乘2再除2的情況

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
img  = Image('ps1.jpg')
#圖片相加就是每個點都是像素點相加 最大的特點就是相對性變亮了
#當然,也可以使用相乘 想減
added = img +img
muti = img*2
sword = img-img
division = img/2
added.show()
#time.sleep(1)
sword.show()
#time.sleep(2)
muti.show()
#time.sleep(2)
division.show()
time.sleep(1)
#在數學上一個數乘以2再除以2肯定是相等的,但是在color中因爲最大值是255,所以不一定相等
division2 = muti/2
contain = muti.sideBySide(img.sideBySide(division2))
contain.show()
time.sleep(5)

15.圖片顏色直方圖

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color
import time
img  = Image('snake.png')
#獲取的是圖片中各個像素點的數目,一個值代表的是一個範圍內像素點數目。默認是50個
histogram = img.histogram(256)
#轉換成HSV格式後的像素點
histogram1 = img.hueHistogram()
print histogram1
#爲色度峯值,可以使剨創剝剮剝剡剫剳刨利函數完成
peaks = img.huePeaks()
print peaks
time.sleep(1)
#製作二值化掩模,去除color1和color2之外的所有顏色,只保留它們之間的顏色
mask = img.createBinaryMask(color1 = (100,150,180),color2 = Color.BLACK)
#使用morphClose利清理圖像上的噪音
mask = mask.morphClose()
result = img - mask.invert()
result.show()
time.sleep(3)

16.製造運動模糊效果

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from SimpleCV import Image,Color,Camera,Display
import time
frameWeight =0.2
cam = Camera()
lastImage = cam.getImage()
display = Display((680, 480))

while not display.isDone():
    img = cam.getImage()
    img = (img * frameWeight) + (lastImage * (1 - frameWeight))
    img.save(display)
    lastImage = img
    lastImage.show()
    time.sleep(0.5)

如果你覺得本文對你有用,可以打賞一下!非常感謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章