python圖像識別時鐘的簡單介紹

本文目錄一覽:

如何python pil開發圖像識別

1. 簡介。

圖像處理是一門應用非常廣的技術,而擁有非常豐富第三方擴展庫的 Python 當然不會錯過這一門盛宴。PIL (Python Imaging Library)是 Python 中最常用的圖像處理庫,目前版本為 1.1.7,我們可以 在這裡 下載學習和查找資料。

Image 類是 PIL 庫中一個非常重要的類,通過這個類來創建實例可以有直接載入圖像文件,讀取處理過的圖像和通過抓取的方法得到的圖像這三種方法。

2. 使用。

導入 Image 模塊。然後通過 Image 類中的 open 方法即可載入一個圖像文件。如果載入文件失敗,則會引起一個 IOError ;若無返回錯誤,則 open 函數返回一個 Image 對象。現在,我們可以通過一些對象屬性來檢查文件內容,即:

1 import Image

2   im = Image.open(“j.jpg”)

3   print im.format, im.size, im.mode

4 JPEG (440, 330) RGB

這裡有三個屬性,我們逐一了解。

format : 識別圖像的源格式,如果該文件不是從文件中讀取的,則被置為 None 值。

size : 返回的一個元組,有兩個元素,其值為象素意義上的寬和高。

mode : RGB(true color image),此外還有,L(luminance),CMTK(pre-press image)。

現在,我們可以使用一些在 Image 類中定義的方法來操作已讀取的圖像實例。比如,顯示最新載入的圖像:

1 im.show()

2  

輸出原圖:

3. 函數概貌。

3.1    Reading and Writing Images : open( infilename ) , save( outfilename )

3.2    Cutting and Pasting and Merging Images :

crop() : 從圖像中提取出某個矩形大小的圖像。它接收一個四元素的元組作為參數,各元素為(left, upper, right, lower),坐標系統的原點(0, 0)是左上角。

paste() :

merge() :

1 box = (100, 100, 200, 200)

2   region = im.crop(box)

3   region.show()

4   region = region.transpose(Image.ROTATE_180)

5   region.show()

6   im.paste(region, box)

7   im.show()

其效果圖為:

旋轉一幅圖片:

1 def roll(image, delta):

2     “Roll an image sideways”

3

4     xsize, ysize = image.size

5

6     delta = delta % xsize

7     if delta == 0: return image

8

9     part1 = image.crop((0, 0, delta, ysize))

10     part2 = image.crop((delta, 0, xsize, ysize))

11     image.paste(part2, (0, 0, xsize-delta, ysize))

12     image.paste(part1, (xsize-delta, 0, xsize, ysize))

13

14     return image

3.3    幾何變換。

3.3.1    簡單的幾何變換。

1 out = im.resize((128, 128))                     #

2  out = im.rotate(45)                             #逆時針旋轉 45 度角。

3  out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右對換。

4  out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下對換。

5  out = im.transpose(Image.ROTATE_90)             #旋轉 90 度角。

6  out = im.transpose(Image.ROTATE_180)            #旋轉 180 度角。

7 out = im.transpose(Image.ROTATE_270)            #旋轉 270 度角。

各個調整之後的圖像為:

圖片1:

圖片2:

圖片3:

圖片4:

3.3.2    色彩空間變換。

convert() : 該函數可以用來將圖像轉換為不同色彩模式。

3.3.3    圖像增強。

Filters : 在 ImageFilter 模塊中可以使用 filter 函數來使用模塊中一系列預定義的增強濾鏡。

1 import ImageFilter

2 imfilter = im.filter(ImageFilter.DETAIL)

3 imfilter.show()

3.4    序列圖像。

即我們常見到的動態圖,最常見的後綴為 .gif ,另外還有 FLI / FLC 。PIL 庫對這種動畫格式圖也提供了一些基本的支持。當我們打開這類圖像文件時,PIL 自動載入圖像的第一幀。我們可以使用 seek 和 tell 方法在各幀之間移動。

1 import Image

2 im.seek(1)        # skip to the second frame

3

4 try:

5     while 1:

6         im.seek( im.tell() + 1)

7         # do something to im

8 except EOFError:

9     pass

3.5    更多關於圖像文件的讀取。

最基本的方式:im = Image.open(“filename”)

類文件讀取:fp = open(“filename”, “rb”); im = Image.open(fp)

字符串數據讀取:import StringIO; im = Image.open(StringIO.StringIO(buffer))

從歸檔文件讀取:import TarIO; fp = TarIo.TarIO(“Image.tar”, “Image/test/lena.ppm”); im = Image.open(fp)

基本的 PIL 目前就練習到這裡。其他函數的功能可點擊 這裡 進一步閱讀。

怎樣使用Python圖像處理

Python圖像處理是一種簡單易學,功能強大的解釋型編程語言,它有簡潔明了的語法,高效率的高層數據結構,能夠簡單而有效地實現面向對象編程,下文進行對Python圖像處理進行說明。

當然,首先要感謝「戀花蝶」,是他的文章「用Python圖像處理 」 幫我堅定了用Python和PIL解決問題的想法,對於PIL的一些介紹和基本操作,可以看看這篇文章。我這裡主要是介紹點我在使用過程中的經驗。

PIL可以對圖像的顏色進行轉換,並支持諸如24位彩色、8位灰度圖和二值圖等模式,簡單的轉換可以通過Image.convert(mode)函數完 成,其中mode表示輸出的顏色模式。例如”L”表示灰度,”1”表示二值圖模式等。

但是利用convert函數將灰度圖轉換為二值圖時,是採用固定的閾 值127來實現的,即灰度高於127的像素值為1,而灰度低於127的像素值為0。為了能夠通過自定義的閾值實現灰度圖到二值圖的轉換,就要用到 Image.point函數。

深度剖析Python語法功能

深度說明Python應用程序特點

對Python數據庫進行學習研究

Python開發人員對Python經驗之談

對Python動態類型語言解析

Image.point函數有多種形式,這裡只討論Image.point(table, mode),利用該函數可以通過查表的方式實現像素顏色的模式轉換。其中table為顏色轉換過程中的映射表,每個顏色通道應當有256個元素,而 mode表示所輸出的顏色模式,同樣的,”L”表示灰度,”1”表示二值圖模式。

可見,轉換過程的關鍵在於設計映射表,如果只是需要一個簡單的箝位值,可以將table中高於或低於箝位值的元素分別設為1與0。當然,由於這裡的table並沒有什麼特殊要求,所以可以通過對元素的特殊設定實現(0, 255)範圍內,任意需要的一對一映射關係。

示例代碼如下:

import Image # load a color image im = Image.open(”fun.jpg”) # convert to grey level image Lim = im.convert(”L”) Lim.save(”fun_Level.jpg”) # setup a converting table with constant threshold threshold = 80 table = [] for i in range(256): if i threshold: table.append(0) else: table.append(1) # convert to binary image by the table bim = Lim.point(table, ”1”) bim.save(”fun_binary.jpg”)

IT部分通常要完成的任務相當繁重但支撐這些工作的資源卻很少,這已經成為公開的秘密。任何承諾提高編碼效率、降低軟件總成本的IT解決方案都應該進行 周到的考慮。Python圖像處理所具有的一個顯著優勢就是可以在企業的軟件創建和維護階段節約大量資金,而這兩個階段的軟件成本佔到了軟件整個生命周期中總成本 的50%到95%。

Python清晰可讀的語法使得軟件代碼具有異乎尋常的易讀性,甚至對那些不是最初接觸和開發原始項目的程序員都 能具有這樣的強烈感覺。雖然某些程序員反對在Python代碼中大量使用空格。

不過,幾乎人人都承認Python圖像處理的可讀性遠勝於C或者Java,後兩 者都採用了專門的字符標記代碼塊結構、循環、函數以及其他編程結構的開始和結束。提倡Python的人還宣稱,採用這些字符可能會產生顯著的編程風格差 異,使得那些負責維護代碼的人遭遇代碼可讀性方面的困難。轉載

Python繪圖之(1)Turtle庫詳解

Turtle庫是Python語言中一個很流行的繪製圖像的函數庫,想像一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪製了圖形。

畫布就是turtle為我們展開用於繪圖區域,我們可以設置它的大小和初始位置。

設置畫布大小

turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數分別為畫布的寬(單位像素), 高, 背景顏色。

如:turtle.screensize(800,600, “green”)

turtle.screensize() #返回默認大小(400, 300)

turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示佔據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。

如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800, startx=100, starty=100)

2.1 畫筆的狀態

在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這裡我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。

2.2 畫筆的屬性

畫筆(畫筆的屬性,顏色、畫線的寬度等)

1) turtle.pensize():設置畫筆的寬度;

2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字符串如”green”, “red”,也可以是RGB 3元組。

3) turtle.speed(speed):設置畫筆移動速度,畫筆繪製的速度範圍[0,10]整數,數字越大越快。

2.3 繪圖命令

操縱海龜繪圖有着許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。

(1) 畫筆運動命令

(2) 畫筆控制命令

(3) 全局控制命令

(4) 其他命令

3. 命令詳解

3.1 turtle.circle(radius, extent=None, steps=None)

描述:以給定半徑畫圓

參數:

radius(半徑):半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;

extent(弧度) (optional);

steps (optional) (做半徑為radius的圓的內切正多邊形,多邊形邊數為steps)。

舉例:

circle(50) # 整圓;

circle(50,steps=3) # 三角形;

circle(120, 180) # 半圓

實例:

1、太陽花

2、五角星

3、時鐘程序

python可以製作時鐘嗎?

調試調試,參考參考

import sys

from PyQt4 import QtGui, QtCore

from PyQt4.QtCore import Qt

from PyQt4.QtCore import QPoint

from PyQt4.QtCore import QTimer

from PyQt4.QtCore import QTime

from PyQt4.QtGui import QPainter

from PyQt4.QtGui import QColor

from PyQt4.QtGui import QPolygon

from PyQt4.QtCore import SIGNAL as signal

class Clock(QtGui.QWidget):

”’

classdocs

”’

def __init__(self):

”’

Constructor

”’

super(Clock, self).__init__()

self.hourColor=QColor(127, 0, 127);

self.minuteColor=QColor(0, 127, 127, 191)

self.secondColor=QColor(127, 127,0,120)

self.initUI()

self.timer = QTimer()

self.timer.timeout.connect(self.update)

self.timer.start(30)

self.show()

def handChange(self):

self.side = min(self.width(), self.height())

self.hand=(max(self.side/200,4), max(self.side/100,8), max(self.side/40,30))

self.hourHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2])])

self.minuteHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*2)])

self.secondHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*3)])

def set_transparency(self, enabled):

if enabled:

self.setAutoFillBackground(False)

else:

self.setAttribute(Qt.WA_NoSystemBackground, False)

#下面這種方式好像不行

# pal=QtGui.QPalette()

# pal.setColor(QtGui.QPalette.Background, QColor(127, 127,10,120))

# self.setPalette(pal)

self.setAttribute(Qt.WA_TranslucentBackground, enabled)

self.repaint()

def initUI(self):

self.setGeometry(300, 300, 300, 200)

self.setWindowTitle(‘Clock’)

self.handChange()

self.rightButton=False

# 下面兩個配合實現窗體透明和置頂

sizeGrip=QtGui.QSizeGrip(self)

self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow )

#self.setMouseTracking(True);

self.trans=True

self.set_transparency(True)

quitAction = QtGui.QAction(QtGui.QIcon(‘quit.png’), ‘Quit’, self)

self.connect(quitAction,signal(“triggered()”),QtGui.qApp.quit)

backAction = QtGui.QAction( ‘Back’, self)

self.connect(backAction,signal(“triggered()”),self.backClicked)

self.popMenu= QtGui.QMenu()

self.popMenu.addAction(quitAction)

self.popMenu.addAction(backAction)

def resizeEvent(self, e):

self.handChange()

def backClicked(self):

if self.trans == True :

self.trans = False

self.set_transparency(False)

else:

self.trans = True

self.set_transparency(True)

def mouseReleaseEvent(self,e):

if self.rightButton == True:

self.rightButton=False

self.popMenu.popup(e.globalPos())

def mouseMoveEvent(self, e):

if e.buttons() Qt.LeftButton:

self.move(e.globalPos()-self.dragPos)

e.accept()

def mousePressEvent(self, e):

if e.button() == Qt.LeftButton:

self.dragPos=e.globalPos()-self.frameGeometry().topLeft()

e.accept()

if e.button() == Qt.RightButton and self.rightButton == False:

self.rightButton=True

def paintEvent(self, e):

time = QTime.currentTime()

qp = QPainter()

qp.begin(self)

qp.setRenderHint(QPainter.Antialiasing) # 開啟這個抗鋸齒,會很佔cpu的!

qp.translate(self.width() / 2, self.height() / 2)

qp.scale(self.side / 200.0, self.side / 200.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.hourColor)

qp.save()

qp.rotate(30.0 * ((time.hour() + time.minute()/ 60.0)))

qp.drawConvexPolygon(self.hourHand)

qp.restore()

qp.setPen(self.hourColor)

for i in range(12):

qp.drawLine(88, 0, 96, 0)

qp.rotate(30.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.minuteColor)

qp.save()

qp.rotate(6.0 * ((time.minute() + (time.second()+time.msec()/1000.0) / 60.0)))

qp.drawConvexPolygon(self.minuteHand)

qp.restore()

qp.setPen(self.minuteColor)

for i in range(60):

if (i % 5) is not 0:

qp.drawLine(92, 0, 96, 0)

qp.rotate(6.0)

qp.setPen(QtCore.Qt.NoPen)

qp.setBrush(self.secondColor)

qp.save()

qp.rotate(6.0*(time.second()+time.msec()/1000.0))

qp.drawConvexPolygon(self.secondHand)

qp.restore()

qp.end()

if __name__ == ‘__main__’:

app = QtGui.QApplication(sys.argv)

clock = Clock()

sys.exit(app.exec_())

Python如何圖像識別?

pillow包可以處理圖像

pillow:(了解)(python image library)是一個有關圖像圖片處理的包,這個包底層用的C C++,但PIL包是python2下使用。所以又更新了一個適合python3版本的、基於PIL包的新包pillow。

安裝pillow:

pip install pillow

至於識別,那就可能是文字識別或人臉識別。這需要學習很多東西,建議小白還是先把基礎學好吧。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/253805.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 02:17
下一篇 2024-12-14 02:17

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論