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)

如果你觉得本文对你有用,可以打赏一下!非常感谢

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