問題來源
? ? ? ? 在csdn上看到的這樣一個問題,好像也沒個正經答案,都用chatGPT回答,挺沒勁的。不說提供個vi源代碼,至少也來張截圖嘛。我想著問題也不難,就自己動動手吧。
代碼展示1
1、首先使用imaq ArrayToImage.vi創建了一個500*500分辨率、像素值全為0的全白的灰度圖;
2、然后定義畫圓屬性值,圓心坐標XY和圓半徑Radius。我們主要是使用Imaq Draw.vi來畫圓;
DrawMode:Frame參數僅畫邊緣,Paint參數則會填充;
Shape to Draw:Oval參數是畫圓的意思,我們也可以選擇畫直線Line和矩形Rectangle;
Pixel Color:灰度圖中,0-255,從黑變白;0就是最黑。
Coordinates:在畫圓的功能中,該參數的含義就是圓的外切四邊形的左上角和右下角坐標,數組索引0、1代表左上角點XY坐標值,數組索引2、3代表右下角點XY坐標值。那么我們知道圓心坐標和半徑,通過簡單的計算就很容易得到這個數組。
3、點擊“畫圓”按鈕,我們就能在image控件上得到我們想要的圓。
4、修改畫圓屬性值,并點擊畫圓按鈕,我們會繼續生成其他的圓形圖案。唯一的缺點是,畫圓不可逆,我們沒法清除已經畫上去的圓,除非重新運行vi。所以我想推薦使用另外一個函數Imaq Overlay Oval.vi。
代碼展示2
1、我們使用Imaq Overlay Oval.vi來畫圓;
?Bounding Rectangle:和上面的Coordinates是一個含義,不過上面的是數組,這里的是簇。
Draw Mode:Frame參數畫邊緣,Fill參數填充;
Color:可使用顏色選擇框選擇自己想要的圖形顏色;
2、我們是用了Imaq Clear Overlay.vi在每次畫圓之前可以把之前的Overlay涂層清除。
3、如果我們想保存現在的涂層,可以使用Imaq Merge Overlay.vi,這樣就是新建的Overlay與源圖融合在一起了。
4、那現在我們再考慮一個問題,我們能不能直接在控件上用ROI工具畫圓,所畫就是所得,不需要定義圓心和半徑。當然,是可行的。
代碼展示3
通過image控件上ROI來定義畫圓形的區域,使用矩形工具、圓形工具畫ROI都可以。Get Last Event方法節點判斷Type=2也就是為Draw時才會執行Imaq Overlay Oval,并把坐標點轉換成包含4個元素的簇,作為參數輸入。
Get Last Event的方法節點創建步驟見下圖:
文末總結
? ? ? ? 一些思路分享,都是些很簡單的函數調用,希望能幫助到需要的人吧。
????????