最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用matplotlib為圖片上添加觸發(fā)事件進(jìn)行交互

 更新時(shí)間:2020年04月23日 14:20:12   作者:風(fēng) 先生  
這篇文章主要介紹了利用matplotlib為圖片上添加觸發(fā)事件進(jìn)行交互,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

這篇文章的目的出于實(shí)驗(yàn)的需要,我需要對(duì)圖片上的部分區(qū)域做出涂抹標(biāo)記,本來(lái)是選擇用opencv做交互的,但在需要進(jìn)行圖像的輸出以及鼠標(biāo)時(shí)間添加時(shí),opencv出現(xiàn)錯(cuò)誤。

解決方案網(wǎng)上有很多,嘗試以后依然bug,這里先做一個(gè)記錄,有時(shí)間再來(lái)處理。

錯(cuò)誤報(bào)告如下:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file -------src-dir-------/opencv-2.4.10/modules/highgui/src/window.cpp, line 501
Traceback (most recent call last):
File "test.py", line 20, in <module>
cv2.imshow('img',img)
cv2.error: -------src-dir-------/opencv-2.4.10/modules/highgui/src/window.cpp:501: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvShowImage

這里我們切換另一種解決方案,利用python的matplotlib庫(kù)完成圖像的輸出以及鼠標(biāo)事件的添加。

點(diǎn)擊圖片,在圖像中鼠標(biāo)對(duì)應(yīng)位置畫(huà)點(diǎn):

# coding=utf-8
from matplotlib import pyplot as plt
import cv2

def on_press(event):
 if event.inaxes == None:
  print "none"
  return 
 #在鼠標(biāo)的當(dāng)前位置繪制一個(gè)點(diǎn)
 ax.scatter(event.xdata, event.ydata)
 #更新畫(huà)板
 fig.canvas.draw()

if __name__ == "__main__":
 fileN = r'./0107_1.3.6.1.4.1.14519.5.2.1.6279.6001.263660956768649083933159084365.bmp'
 img = cv2.imread(fileN)
 cv2.imshow('img',img)
 fig = py.figure()
 fig.canvas.mpl_connect("button_press_event", on_press) 
 ax = fig.add_subplot(121)
 ax1 = fig.add_subplot(122)
 ax.imshow(img)
 ax1.imshow(img)
 plt.axis("off")
 plt.show()

先來(lái)簡(jiǎn)單解釋一下代碼的含義:

fig.canvas.mpl_connect("button_press_event", on_press)#在這個(gè)figure上加點(diǎn)擊事件,點(diǎn)擊后的情況在自己寫(xiě)的on_press()方法里 
def on_press(event): 
  event.inaxes.figure.canvas.draw()#用于圖片刷新 
  event.x#事件的坐標(biāo)用于其他按鈕點(diǎn)擊和figure點(diǎn)擊發(fā)生沖突時(shí)判斷返回 
  event.xdata,event.ydata#鼠標(biāo)點(diǎn)擊的位置,與上面那個(gè)坐標(biāo)表示形式不同 

最后的輸出結(jié)果入下圖。我們得到了非常奇怪的結(jié)果,如果你自己親自動(dòng)手試的話(huà)體會(huì)應(yīng)該會(huì)更有體會(huì),兩邊的圖像本來(lái)應(yīng)該一樣大,但在第一次繪制點(diǎn)的時(shí)候,左側(cè)圖像出現(xiàn)了閃動(dòng),然后尺寸的比例突然發(fā)生了變化。

是的,圖像尺寸沒(méi)有發(fā)生變化,但尺寸的比例的確變了,這里我們要做的就是關(guān)閉自動(dòng)變化的尺度比例。

if __name__ == "__main__":
 fileN = r'./0107_1.3.6.1.4.1.14519.5.2.1.6279.6001.263660956768649083933159084365.bmp'
 img = cv2.imread(fileN)
 cv2.imshow('img',img)
 fig = py.figure()
 fig.canvas.mpl_connect("button_press_event", on_press) 
 ax = fig.add_subplot(121)
 ax1 = fig.add_subplot(122)
 ax.imshow(img)
 ax1.imshow(img)
 #關(guān)閉自動(dòng)尺度適配
 ax.set_autoscale_on(False) 
 plt.axis("off")
 plt.show()

當(dāng)然,我們可以改變繪制標(biāo)記的樣式:

ax.scatter(x,y,c='k',s=25,alpha=1.0,marker='o')
#T:散點(diǎn)的顏色
#s:散點(diǎn)的大小
#alpha:是透明程度


現(xiàn)在我們能夠在圖像上進(jìn)行標(biāo)記了,但這樣還不夠,程序需要獲取這些標(biāo)記點(diǎn)。

實(shí)際上fig.canvas.mpl_connect("button_press_event", on_press)能夠進(jìn)行自定義的多參數(shù)傳遞,如果在每次繪制的時(shí)候?qū)?shù)據(jù)保存在外部傳入的列表中,那么當(dāng)畫(huà)板被銷(xiāo)毀時(shí),我們就能獲取到原來(lái)所有的繪制點(diǎn)。

這里介紹兩種使用方法:

def on_key(event, arg1, arg2, arg3):
 pass
canvas.mpl_connect('key_press_event', lambda event: on_key(event, plt1, plt2, plt3))

def on_key(event, args_list):
 pass
fig.canvas.mpl_connect('key_press_event', lambda event: on_key(event, [plt1, plt2, plt3]))

這里需要注意的是scatter繪制的點(diǎn),實(shí)際上并沒(méi)有大小的概念,這個(gè)點(diǎn)實(shí)質(zhì)是一個(gè)坐標(biāo)。

如果需要繪制有實(shí)際面積的圓形的標(biāo)記,可以使用matplotlib.patches.Circle

具體的使用如下:

from matplotlib.patches import Circle

fig = plt.figure()
ax = fig.add_subplot(111)
cir = Circle(xy = (event.xdata, event.ydata),facecolor = 'black', edgecolor='black',radius=10, alpha=1.0) 
ax.add_patch(cir)

以上這篇利用matplotlib為圖片上添加觸發(fā)事件進(jìn)行交互就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Python中測(cè)試訪問(wèn)同一數(shù)據(jù)的競(jìng)爭(zhēng)條件的方法

    在Python中測(cè)試訪問(wèn)同一數(shù)據(jù)的競(jìng)爭(zhēng)條件的方法

    這篇文章主要介紹了在Python中測(cè)試訪問(wèn)同一數(shù)據(jù)的競(jìng)爭(zhēng)條件的方法,探究多線(xiàn)程或多進(jìn)程情況下優(yōu)先訪問(wèn)權(quán)的問(wèn)題,需要的朋友可以參考下
    2015-04-04
  • Python通用循環(huán)的構(gòu)造方法實(shí)例分析

    Python通用循環(huán)的構(gòu)造方法實(shí)例分析

    這篇文章主要介紹了Python通用循環(huán)的構(gòu)造方法,結(jié)合實(shí)例形式分析了Python常見(jiàn)的交互循環(huán)、哨兵循環(huán)、文件循環(huán)、死循環(huán)等實(shí)現(xiàn)與處理技巧,需要的朋友可以參考下
    2018-12-12
  • Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例

    Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python辦公自動(dòng)化之網(wǎng)絡(luò)監(jiān)控和壓縮文件處理

    Python辦公自動(dòng)化之網(wǎng)絡(luò)監(jiān)控和壓縮文件處理

    Python辦公?動(dòng)化是利用Python編程語(yǔ)?來(lái)創(chuàng)建腳本和程序,以簡(jiǎn)化、加速和?動(dòng)化?常辦公任務(wù)和工作流程的過(guò)程,本文主要介紹了如何進(jìn)行網(wǎng)絡(luò)監(jiān)控和壓縮文件處理,感興趣的可以了解下
    2023-12-12
  • pytorch中的inference使用實(shí)例

    pytorch中的inference使用實(shí)例

    今天小編就為大家分享一篇pytorch中的inference使用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 讓Python更加充分的使用Sqlite3

    讓Python更加充分的使用Sqlite3

    這篇文章主要為大家詳細(xì)介紹了Python更加充分的使用Sqlite3的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python生成掃雷地圖的方法

    Python生成掃雷地圖的方法

    這篇文章主要為大家詳細(xì)介紹了Python生成掃雷地圖的方法,并非游戲?qū)崿F(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Pytorch中Softmax與LogSigmoid的對(duì)比分析

    Pytorch中Softmax與LogSigmoid的對(duì)比分析

    這篇文章主要介紹了Pytorch中Softmax與LogSigmoid的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python Pivot table透視表使用方法解析

    Python Pivot table透視表使用方法解析

    這篇文章主要介紹了Python Pivot table透視表使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python中的list.sort()方法和函數(shù)sorted(list)

    Python中的list.sort()方法和函數(shù)sorted(list)

    這篇文章主要介紹了Python中的list.sort()方法和函數(shù)sorted(list),sort()是列表的方法,修改原列表使得它按照大小排序,沒(méi)有返回值,返回None
    2022-08-08

最新評(píng)論

同心县| 盐源县| 江阴市| 郸城县| 双牌县| 平谷区| 镇巴县| 大庆市| 泰安市| 桓台县| 吉隆县| 肇州县| 盐边县| 城市| 蓝田县| 南和县| 大安市| 怀化市| 汤原县| 贵州省| 辉县市| 龙江县| 鲁甸县| 安乡县| 鄂尔多斯市| 嵊泗县| 准格尔旗| 贵南县| 丰都县| 长白| 南陵县| 安平县| 鄱阳县| 重庆市| 彰化市| 盱眙县| 鹰潭市| 广灵县| 金堂县| 陆丰市| 宁津县|