python隨機顏色函數(shù) python多種顏色

目標(biāo)跟蹤(3)MultiTracker : 基于 OpenCV (C++/Python) 的多目標(biāo)跟蹤

在這篇文章中,我們將介紹如何使用通過 MultiTracker 類實現(xiàn)的 OpenCV 的多對象跟蹤 API。我們將共享C++ 和 Python 代碼。

成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為曾都等服務(wù)建站,曾都等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為曾都企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

大多數(shù)計算機視覺和機器學(xué)習(xí)的初學(xué)者都學(xué)習(xí)對象檢測。如果您是初學(xué)者,您可能會想為什么我們需要對象跟蹤。我們不能只檢測每一幀中的對象嗎?

讓我們來探究一下跟蹤是有用的幾個原因。

首先,當(dāng)在視頻幀中檢測到多個對象(例如人)時,跟蹤有助于跨幀建立對象的身份。

其次,在某些情況下,對象檢測可能會失敗,但仍可能跟蹤對象,因為跟蹤考慮了對象在前一幀中的位置和外觀。

第三,一些跟蹤算法非??欤驗樗鼈冏龅氖蔷植克阉?,而不是全局搜索。因此,我們可以通過每n幀進行目標(biāo)檢測,并在中間幀中跟蹤目標(biāo),從而為我們的系統(tǒng)獲得很高的幀率。

那么,為什么不在第一次檢測后無限期地跟蹤對象呢?跟蹤算法有時可能會丟失它正在跟蹤的對象。例如,當(dāng)對象的運動太大時,跟蹤算法可能跟不上。許多現(xiàn)實世界的應(yīng)用程序同時使用檢測和跟蹤。

在本教程中,我們只關(guān)注跟蹤部分。我們想要跟蹤的對象將通過拖動它們周圍的包圍框來指定。

OpenCV 中的 MultiTracker 類提供了多目標(biāo)跟蹤的實現(xiàn)。它是一個簡單的實現(xiàn),因為它獨立處理跟蹤對象,而不對跟蹤對象進行任何優(yōu)化。

讓我們逐步查看代碼,了解如何使用 OpenCV 的多目標(biāo)跟蹤 API。

2.1 第 1 步:創(chuàng)建單一對象跟蹤器

多目標(biāo)跟蹤器只是單目標(biāo)跟蹤器的集合。我們首先定義一個函數(shù),該函數(shù)接受一個跟蹤器類型作為輸入,并創(chuàng)建一個跟蹤器對象。OpenCV有8種不同的跟蹤器類型:BOOSTING, MIL, KCF,TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT。

如果您想使用 GOTURN 跟蹤器,請務(wù)必閱讀這篇文章并下載 caffe 模型。

在下面的代碼中,給定跟蹤器類的名稱,我們返回跟蹤器對象。這將在稍后用于多目標(biāo)跟蹤器。

Python

C++

2.2 第 2 步:讀取視頻的第一幀

多目標(biāo)跟蹤器需要兩個輸入

給定這些信息,跟蹤器在所有后續(xù)幀中跟蹤這些指定對象的位置。 在下面的代碼中,我們首先使用 VideoCapture 類加載視頻并讀取第一幀。這將在稍后用于初始化 MultiTracker。

Python

C++

2.3 第 3 步:在第一幀中定位對象

接下來,我們需要在第一幀中定位我們想要跟蹤的對象。該位置只是一個邊界框。 OpenCV 提供了一個名為 selectROI 的函數(shù),該函數(shù)會彈出一個 GUI 來選擇邊界框(也稱為感興趣區(qū)域 (ROI))。 在 C++ 版本中,selectROI 允許您獲取多個邊界框,但在 Python 版本中,它只返回一個邊界框。所以,在 Python 版本中,我們需要一個循環(huán)來獲取多個邊界框。 對于每個對象,我們還選擇一種隨機顏色來顯示邊界框。 代碼如下所示。

Python

C++

getRandomColors 函數(shù)相當(dāng)簡單

2.4 第 3 步:初始化 MultiTracker

到目前為止,我們已經(jīng)讀取了第一幀并獲得了對象周圍的邊界框。這就是我們初始化多目標(biāo)跟蹤器所需的所有信息。

我們首先創(chuàng)建一個 MultiTracker 對象,并向其中添加與邊界框一樣多的單個對象跟蹤器。在此示例中,我們使用 CSRT 單對象跟蹤器,但您可以通過將下面的 trackerType 變量更改為本文開頭提到的 8 個跟蹤器之一來嘗試其他跟蹤器類型。 CSRT 跟蹤器不是最快的,但在我們嘗試的許多情況下它產(chǎn)生了最好的結(jié)果。

您還可以使用包裹在同一個 MultiTracker 中的不同跟蹤器,但當(dāng)然,這沒什么意義。

MultiTracker 類只是這些單個對象跟蹤器的包裝器。正如我們從上一篇文章中知道的那樣,單個對象跟蹤器是使用第一幀初始化的,并且邊界框指示我們想要跟蹤的對象的位置。 MultiTracker 將此信息傳遞給它在內(nèi)部包裝的單個對象跟蹤器。

Python

C++

2.5 第 4 步:更新 MultiTracker 并顯示結(jié)果

最后,我們的 MultiTracker 已準(zhǔn)備就緒,我們可以在新幀中跟蹤多個對象。我們使用 MultiTracker 類的 update 方法來定位新框架中的對象。每個跟蹤對象的每個邊界框都使用不同的顏色繪制。

Python

C++

C++

Python

python輸出五種顏色隨機兩種的隨機組合

個人覺得,你問的沒問題,但是圖片上出的題有問題,隨機2種顏色和2中所有顏色的組合,這是2個問題啊。我2中方法都寫了,你自己看吧

import?random

colour?=?('red',?'orange',?'green',?'blue',?'black')

def?rand_2_colour():

#?隨機挑選2種顏色

for?i?in?random.sample(range(0,?5),?2):

print('隨機挑選的2種顏色是:'+colour[i])

def?all_2_colour():

#?列出所有2種顏色的組合

print('所有2中顏色的組合是:')

for?i?in?range(0,?5):

for?j?in?range(i?+?1,?5):

print(colour[i],?colour[j])

if?__name__?==?'__main__':

rand_2_colour()

all_2_colour()

用python生成隨機數(shù)的幾種方法

1 從給定參數(shù)的正態(tài)分布中生成隨機數(shù)

當(dāng)考慮從正態(tài)分布中生成隨機數(shù)時,應(yīng)當(dāng)首先知道正態(tài)分布的均值和方差(標(biāo)準(zhǔn)差),有了這些,就可以調(diào)用python中現(xiàn)有的模塊和函數(shù)來生成隨機數(shù)了。這里調(diào)用了Numpy模塊中的random.normal函數(shù),由于邏輯非參簡單,所有直接貼上代碼如下:

import numpy as np# 定義從正態(tài)分布中獲取隨機數(shù)的函數(shù)def get_normal_random_number(loc, scale): """ :param loc: 正態(tài)分布的均值 :param scale: 正態(tài)分布的標(biāo)準(zhǔn)差 :return:從正態(tài)分布中產(chǎn)生的隨機數(shù) """ # 正態(tài)分布中的隨機數(shù)生成 number = np.random.normal(loc=loc, scale=scale) # 返回值 return number# 主模塊if __name__ == "__main__": # 函數(shù)調(diào)用 n = get_normal_random_number(loc=2, scale=2) # 打印結(jié)果 print(n) # 結(jié)果:3.275192443463058

2 從給定參數(shù)的均勻分布中獲取隨機數(shù)的函數(shù)

考慮從均勻分布中獲取隨機數(shù)的時候,要事先知道均勻分布的下界和上界,然后調(diào)用Numpy模塊的random.uniform函數(shù)生成隨機數(shù)。

import numpy as np# 定義從均勻分布中獲取隨機數(shù)的函數(shù)def get_uniform_random_number(low, high): """ :param low: 均勻分布的下界 :param high: 均勻分布的上界 :return: 從均勻分布中產(chǎn)生的隨機數(shù) """ # 均勻分布的隨機數(shù)生成 number = np.random.uniform(low, high) # 返回值 return number# 主模塊if __name__ == "__main__": # 函數(shù)調(diào)用 n = get_uniform_random_number(low=2, high=4) # 打印結(jié)果 print(n) # 結(jié)果:2.4462417140153114

3 按照指定概率生成隨機數(shù)

有時候我們需要按照指定的概率生成隨機數(shù),比如已知盒子中每種顏色的球的比例,猜測下一次取出的球的顏色。在這里介紹的問題和上面的例子相似,要求給定一個概率列表,從列表對應(yīng)的數(shù)字列表或區(qū)間列表中生成隨機數(shù),分兩部分討論。

3.1 按照指定概率從數(shù)字列表中隨機抽取數(shù)字

假設(shè)給定一個數(shù)字列表和一個與之對應(yīng)的概率列表,兩個列表對應(yīng)位置的元素組成的元組即表示該數(shù)字在數(shù)字列表中以多大的概率出現(xiàn),那么如何根據(jù)這些已知條件從數(shù)字列表中按概率抽取隨機數(shù)呢?在這里我們考慮用均勻分布來模擬概率,代碼如下:

import numpy as npimport random# 定義從均勻分布中獲取隨機數(shù)的函數(shù)def get_uniform_random_number(low, high): """ :param low: 均勻分布的下界 :param high: 均勻分布的上界 :return: 從均勻分布中產(chǎn)生的隨機數(shù) """ # 均勻分布的隨機數(shù)生成 number = np.random.uniform(low, high) # 返回值 return number# 定義從一個數(shù)字列表中以一定的概率取出對應(yīng)區(qū)間中數(shù)字的函數(shù)def get_number_by_pro(number_list, pro_list): """ :param number_list:數(shù)字列表 :param pro_list:數(shù)字對應(yīng)的概率列表 :return:按概率從數(shù)字列表中抽取的數(shù)字 """ # 用均勻分布中的樣本值來模擬概率 x = random.uniform(0, 1) # 累積概率 cum_pro = 0.0 # 將可迭代對象打包成元組列表 for number, number_pro in zip(number_list, pro_list): cum_pro += number_pro if x cum_pro: # 返回值 return number# 主模塊if __name__ == "__main__": # 數(shù)字列表 num_list = [1, 2, 3, 4, 5] # 對應(yīng)的概率列表 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1] # 函數(shù)調(diào)用 n = get_number_by_pro(number_list=num_list, pro_list=pr_list) # 打印結(jié)果 print(n) # 結(jié)果:1

3.2 按照指定概率從區(qū)間列表中的某個區(qū)間內(nèi)生成隨機數(shù)

給定一個區(qū)間列表和一個與之對應(yīng)的概率列表,兩個列表相應(yīng)位置的元素組成的元組即表示某數(shù)字出現(xiàn)在某區(qū)間內(nèi)的概率是多少,已知這些,我們?nèi)绾紊呻S機數(shù)呢?這里我們通過兩次使用均勻分布達到目的,代碼如下:

import numpy as npimport random# 定義從均勻分布中獲取隨機數(shù)的函數(shù)def get_uniform_random_number(low, high): """ :param low: 均勻分布的下界 :param high: 均勻分布的上界 :return: 從均勻分布中產(chǎn)生的隨機數(shù) """ # 均勻分布的隨機數(shù)生成 number = np.random.uniform(low, high) # 返回值 return number# 定義從一個數(shù)字列表中以一定的概率取出對應(yīng)區(qū)間中數(shù)字的函數(shù)def get_number_by_pro(number_list, pro_list): """ :param number_list:數(shù)字列表 :param pro_list:數(shù)字對應(yīng)的概率列表 :return:按概率從數(shù)字列表中抽取的數(shù)字 """ # 用均勻分布中的樣本值來模擬概率 x = random.uniform(0, 1) # 累積概率 cum_pro = 0.0 # 將可迭代對象打包成元組列表 for number, number_pro in zip(number_list, pro_list): cum_pro += number_pro if x cum_pro: # 從區(qū)間[number. number - 1]上隨機抽取一個值 num = get_uniform_random_number(number, number - 1) # 返回值 return num# 主模塊if __name__ == "__main__": # 數(shù)字列表 num_list = [1, 2, 3, 4, 5] # 對應(yīng)的概率列表 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1] # 函數(shù)調(diào)用 n = get_number_by_pro(number_list=num_list, pro_list=pr_list) # 打印結(jié)果 print(n) # 結(jié)果:3.49683787011193

python隨機產(chǎn)生顏色

import random

r = lambda: random.randint(0,255)

print('#XXX' % (r(),r(),r()))

如何用python生成隨機的15行6列的隨機數(shù)據(jù)

用python生成隨機的15行6列的隨機數(shù)據(jù)的方法如下:

1.import numpy as np # 定義從正態(tài)分布中獲取隨機數(shù)的函數(shù) def get_normal_random_number(loc, scale): """ :param loc: 正態(tài)分布的均值 :param scale: 正態(tài)分布的標(biāo)準(zhǔn)差 :return:從正態(tài)分布中產(chǎn)生的隨機數(shù) """ # 正態(tài)分布中的隨機數(shù)生成 number = np.random.normal(loc=loc, scale=scale) # 返回值 return number # 主模塊 if __name__ == "__main__": # 函數(shù)調(diào)用 n = get_normal_random_number(loc=2, scale=2) # 打印結(jié)果 print(n) # 結(jié)果:3.275192443463058

2 從給定參數(shù)的均勻分布中獲取隨機數(shù)的函數(shù)

考慮從均勻分布中獲取隨機數(shù)的時候,要事先知道均勻分布的下界和上界,然后調(diào)用Numpy模塊的random.uniform函數(shù)生成隨機數(shù)。

import numpy as np # 定義從均勻分布中獲取隨機數(shù)的函數(shù) def get_uniform_random_number(low, high): """ :param low: 均勻分布的下界 :param high: 均勻分布的上界 :return: 從均勻分布中產(chǎn)生的隨機數(shù) """ # 均勻分布的隨機數(shù)生成 number = np.random.uniform(low, high) # 返回值 return number # 主模塊 if __name__ == "__main__": # 函數(shù)調(diào)用 n = get_uniform_random_number(low=2, high=4) # 打印結(jié)果 print(n) # 結(jié)果:2.4462417140153114

3 按照指定概率生成隨機數(shù)

有時候我們需要按照指定的概率生成隨機數(shù),比如已知盒子中每種顏色的球的比例,猜測下一次取出的球的顏色。在這里介紹的問題和上面的例子相似,要求給定一個概率列表,從列表對應(yīng)的數(shù)字列表或區(qū)間列表中生成隨機數(shù),分兩部分討論。

在python里,如何實現(xiàn)點擊開始按鈕,開始慢慢在不同位置出現(xiàn)不同顏色的不同圖形?

示例代碼

# 導(dǎo)入Tkinter模塊

from tkinter import *

# 創(chuàng)建一個窗口

window = Tk()

# 定義一個函數(shù),用來生成圖形

def generate_shape():

# 使用隨機數(shù)生成不同的圖形和顏色

shape = random.choice(["circle", "square", "triangle"])

color = random.choice(["red", "green", "blue"])

# 使用隨機數(shù)生成不同的位置

x = random.randint(0, 200)

y = random.randint(0, 200)

# 在窗口中繪制圖形

if shape == "circle":

# 繪制圓形

canvas.create_oval(x, y, x + 50, y + 50, fill=color)

elif shape == "square":

# 繪制正方形

canvas.create_rectangle(x, y, x + 50, y + 50, fill=color)

else:

# 繪制三角形

points = [x, y, x + 50, y + 50, x + 25, y + 75]

canvas.create_polygon(points, fill=color)

# 創(chuàng)建一個畫布

canvas = Canvas(window, width=200, height=200)

canvas.pack()

# 創(chuàng)建一個按鈕

button = Button(window, text="Start", command=generate_shape)

button.pack()

# 進入消息循環(huán)

window.mainloop()

新聞名稱:python隨機顏色函數(shù) python多種顏色
轉(zhuǎn)載來源:http://muchs.cn/article30/dosdepo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、手機網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)