在Python中可使用的多線程模塊主要有兩個,thread和threading模塊。thread模塊提供了基本的線程和鎖的支持,建議新手不要使用。threading模塊允許創(chuàng)建和管理線程,提供了更多的同步原語。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比英山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式英山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋英山地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
thread模塊函數(shù):
start_new_thread(function, args[, kwargs]):啟動新的線程以執(zhí)行function,返回線程標識。
allocate_lock():返回LockType對象。
exit():拋出SystemExit異常,如果沒有被捕獲,線程靜默退出。
LockType類型鎖對象的方法:
acquire([waitflag]):無參數(shù),無條件獲得鎖,如果鎖已經(jīng)被其他線程獲取,則等待鎖被釋放。如果使用整型參數(shù),參數(shù)為0,如果鎖可獲取,則獲取且返回True,否則返回False;參數(shù)為非0,與無參數(shù)相同。
locked():返回鎖的狀態(tài),如果已經(jīng)被獲取,則返回True,否則返回False。
release():釋放鎖。只有已經(jīng)被獲取的鎖才能被釋放,不限于同一個線程。
threading模塊提供了更好的線程間的同步機制。threading模塊下有如下對象:
Thread
Lock
RLock
Condition
Event
Semaphore
BoundedSemaphore
Timer
threading模塊內(nèi)還有如下的函數(shù):
active_count()
activeCount():返回當前alive的線程數(shù)量
Condition():返回新的條件變量對象
current_thread()
currentThread():返回當前線程對象
enumerate():返回當前活動的線程,不包括已經(jīng)結束和未開始的線程,包括主線程及守護線程。
settrace(func):為所有線程設置一個跟蹤函數(shù)。
setprofile(func):為所有純種設置一個profile函數(shù)。
更多Python知識請關注Python自學網(wǎng)
派桑和c/c++實際上是不同的工具,一個是斧頭,一個是菜刀,各有各的用途。非要把讓菜刀能砍柴,讓斧頭能切菜,這種努力有無必要,值得考慮。
派桑常用劇本,嚕蘇,速度慢,不嚴謹,但有它的便利,例如它有 list, tuple, 之類的東西。
混合編程 常用于 提高 派桑 速度。
常用 方法 是(1)包含 Python.h 文件頭 (2)定義 派桑 的 各種對象 為 各種 c 結構
(3)派桑 的 各種對象用指針,名字用 Py 或 _Py大頭 動態(tài)分配 在 heap (4)用函數(shù)跟蹤統(tǒng)計 各種對象結構 的個數(shù)變化,即時 釋放內(nèi)存(5)及時處理 派桑 exception
(6) 輸出為派桑的數(shù)據(jù)格式。
我沒有合起來用過,不過基本套路如此。
Sublime text追蹤函數(shù)插件:ctags
一、百度一下插件:
解壓后單獨取出ctags.exe使用即可。
二、安裝Sublime text插件:
1)確認Sublime text已安裝Install Package;
2)按Ctrl+shift+P,輸入Install Package回車;
3)彈出下拉框后輸入ctags回車進行下載;
4)以同樣方式安裝PhpBeautifier插件。
三、配置追蹤函數(shù)的快捷鍵(可省略):
1)默認為ctrl+shift+鼠標左鍵。進入如下圖菜單:
彈出如下內(nèi)容:
2)將其全選復制到如下圖位置:
3)粘貼后修改并保存為如下圖內(nèi)容:
至此,安裝部分完成。
四、使用:
1)在命令行模式下(CMD),將目錄定位至PHP工程目錄,以參數(shù)“-R -f .tags”運行ctags.exe。(可根據(jù)需要將ctags.exe所在目錄加入環(huán)境變量中)
運行過程中會有WARNING提示,屬正?,F(xiàn)象。
完成后即可在Sublime text中使用:
1)在Sublime text中按Ctrl+鼠標左鍵點擊函數(shù)調(diào)用位置可跳轉至函數(shù)定義位置;
2)在彈出的函數(shù)定義位置處按Ctrl+鼠標右鍵點擊函數(shù)可跳轉回函數(shù)調(diào)用位置。
在本教程中,我們將學習如何基于 Opencv 和 Python 實現(xiàn)對象跟蹤。
首先必須明確目標檢測和目標跟蹤有什么區(qū)別:
我們將首先討論對象檢測,然后討論如何將對象跟蹤應用于檢測。
可能有不同的應用,例如,計算某個區(qū)域有多少人,檢查傳送帶上有多少物體通過,或者計算高速公路上的車輛。
當然,看過本教程后,您會很容易地想到數(shù)以千計的想法應用于現(xiàn)實生活或可能應用于工業(yè)。
在本教程中,我們將使用 3 個文件:
首先我們需要調(diào)用highway.mp4文件并創(chuàng)建一個mask:
正如您在示例代碼中看到的,我們還使用了 createBackgroundSubtractorMOG2 函數(shù),該函數(shù)返回背景比率(background ratio),然后創(chuàng)建mask。
mask可視化結果:
但是,如您所見,圖像中有很多噪點。因此,讓我們通過刪除所有較小的元素來改進提取,并將我們的注意力集中在大于某個面積的對象上。
使用 OpenCV 的cv2.drawContours函數(shù)繪制輪廓,我們得到了這個結果。
就本教程而言,分析整個窗口并不重要。我們只對計算在某個點通過的所有車輛感興趣,因此,我們必須定義一個感興趣的區(qū)域 ROI 并僅在該區(qū)域應用mask。
結果可視化如下:
函數(shù) cv2.createBackgroundSubtractorMOG2 是在開始時添加的,沒有定義參數(shù),現(xiàn)在讓我們看看如何進一步改進我們的結果。history是第一個參數(shù),在這種情況下,它設置為 100,因為相機是固定的。varThreshold改為 40,因為該值越低,誤報的可能性就越大。在這種情況下,我們只對較大的對象感興趣。
在繼續(xù)處理矩形之前,我們對圖像進行了進一步的清理。為此,閾值函數(shù)就派上用場了。從我們的mask開始,我們告訴它我們只想顯示白色或黑色值,因此通過編寫254, 255,只會考慮 254 和 255 之間的值。
然后我們將找到的對象的坐標插入到 if 條件中并繪制矩形
這是最終結果:
我們現(xiàn)在只需導入和集成跟蹤功能。
一旦創(chuàng)建了對象,我們必須獲取邊界框的每個位置并將它們插入到單個數(shù)組中。
通過在屏幕上顯示結果,您可以看到所有通過 ROI 的通道是如何被識別的,以及它們的位置是如何插入到特定的數(shù)組中的。顯然,識別的摩托車越多,我們的數(shù)組就越大。
現(xiàn)在讓我們將帶有位置的數(shù)組傳遞給tracker.update()。我們將再次獲得一個包含位置的數(shù)組,但此外,將為每個對象分配一個唯一的 ID。
從代碼中可以看出,我們可以使用 for 循環(huán)分析所有內(nèi)容。此時我們只需要繪制矩形并顯示車輛 ID。
在圖像中,您可以看到結果
main.py
從視頻中也可以看到,我們已經(jīng)獲得了我們在本教程開始時設置的結果。
但是,您必須將其視為練習或起點,因為關于這個主題有很多話要說,而本教程的目的只是讓您了解對象跟蹤的原理。
如果你想將 Object Tracking 集成到你的項目中,你應該使用更可靠和先進的對象檢測方法,以及跟蹤方法。
完整代碼地址:私信“333”直接獲取或者「鏈接」
其實這真的很簡單,函數(shù) cv2.cvtColor() 也可以用到這里。但是現(xiàn)在你要傳入的參數(shù)是(你想要
的)BGR 值而不是一副圖。例如,我們要找到綠色的 HSV 值,我們只需在終端輸入以下命令:
**import cv2
import numpy as np
green=np.uint8([0,255,0])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
error: /builddir/build/BUILD/opencv-2.4.6.1/
modules/imgproc/src/color.cpp:3541:
error: (-215) (scn == 3 || scn == 4) (depth == CV_8U || depth == CV_32F)
in function cvtColor
#scn (the number of channels of the source),
#i.e. self.img.channels(), is neither 3 nor 4.
#
#depth (of the source),
#i.e. self.img.depth(), is neither CV_8U nor CV_32F.
# 所以不能用 [0,255,0] ,而要用 [[[0,255,0]]]
# 這里的三層括號應該分別對應于 cvArray , cvMat , IplImage
green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print hsv_green
[[[60 255 255]]]**1234567891011121314151617181912345678910111213141516171819
**擴展縮放只是改變圖像的尺寸大小。OpenCV 提供的函數(shù) cv2.resize()
可以實現(xiàn)這個功能。圖像的尺寸可以自己手動設置,你也可以指定縮放因子。我
們可以選擇使用不同的插值方法。在縮放時我們推薦使用 cv2.INTER_AREA,
在擴展時我們推薦使用 v2.INTER_CUBIC(慢) 和 v2.INTER_LINEAR。
默認情況下所有改變圖像尺寸大小的操作使用的插值方法都是 cv2.INTER_LINEAR。
你可以使用下面任意一種方法改變圖像的尺寸:**
12345671234567
**# -*- coding: utf-8 -*-
"""
@author: Andrew
"""
import cv2
import numpy as np
img=cv2.imread('tu.jpg')
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
while(1):
cv2.imshow('res',res)
cv2.imshow('img',img)
if cv2.waitKey(1)0xFF==27:
break
cv2.destroyAllWindows()**1234567891011121314151617181920212212345678910111213141516171819202122
頂