国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口

這篇具有很好參考價(jià)值的文章主要介紹了基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

學(xué)習(xí)Halcon的HSmartWindowControl窗口控件,用WPF和Opencv仿照了一個(gè)。
顯示控件的主體是兩個(gè)Canvas: Root Canvas是背景,刷上了網(wǎng)格; 把要顯示的圖像作為Image Canvas的圖像背景,
后面圖像的移動(dòng),縮放,實(shí)質(zhì)都是Image Canvas。
基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口
可交互,學(xué)習(xí)的是Halcon的繪圖對(duì)象,WPF的Path來實(shí)現(xiàn)的,Path類有鼠標(biāo)事件,當(dāng)Mouse Enter時(shí),繪圖對(duì)象的線寬增加,離開減少。

		protected virtual void _path_MouseMove(object sender, MouseEventArgs e) { }
        protected virtual void _path_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            _path.Stroke = new SolidColorBrush(_cLineColor);
            mbIsSelected = false;
            (sender as Path).ReleaseMouseCapture();
        }
        protected virtual void _path_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){ }
        protected virtual void _path_MouseLeave(object sender, MouseEventArgs e)
        {
            _dLineWidth -= 3;
        }
        protected virtual void _path_MouseEnter(object sender, MouseEventArgs e)
        {
            _dLineWidth += 3;
        }
        protected virtual void UpdateDrawObjectScaleToImageChange() { }

主要實(shí)現(xiàn)了四個(gè)繪圖對(duì)象,其中Rect2DrawingObejct,用的時(shí)Opencv的RotateRect來算的坐標(biāo)(自己算太麻煩了),后期其實(shí)還可以實(shí)現(xiàn)多邊形的繪圖對(duì)象。
基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口
至于繪圖對(duì)象的回調(diào)函數(shù),用委托實(shí)現(xiàn):

 		public delegate void DrawingObjectCallback(string drawingObjectType, DrawingObject drawingObject);
        protected DrawingObjectCallback OnDrag;
        protected DrawingObjectCallback OnResize;
        protected DrawingObjectCallback OnSelect;

至此,整體功能就實(shí)現(xiàn)了。
但是還有一個(gè)問題,就是Image Canvas控件坐標(biāo)和圖像坐標(biāo)的轉(zhuǎn)換,其實(shí)兩個(gè)坐標(biāo)系的轉(zhuǎn)換Factor也很好算:

 mdScaleXToImage = mMat.Cols / (value * 1.0);
 mdScaleYToImage = mMat.Rows / (value * 1.0);

但是當(dāng)Image Canvas控件的尺寸發(fā)生改變(例如,窗口最大化了)時(shí),這兩個(gè)Factor就也必須更新,對(duì)于控件本身來講,這兩個(gè)值的更新是很容易的,可以在private void imageCanvas_SizeChanged(object sender, SizeChangedEventArgs e)更新。但在繪圖圖像類中就比較麻煩,目前的做法是繪圖圖像類注冊(cè)了依賴屬性,綁定到窗口相應(yīng)的屬性上,然后在依賴屬性的回調(diào)函數(shù)中去更新繪圖對(duì)象的位置

internal  static readonly DependencyProperty ScaleXToImageProperty =
                  DependencyProperty.Register("ScaleXToImage", typeof(double), typeof(DrawingObject), new PropertyMetadata(1.0, OnScaleToImageChanged));
internal  static readonly DependencyProperty ScaleYToImageProperty =
                  DependencyProperty.Register("ScaleYToImage", typeof(double), typeof(DrawingObject), new PropertyMetadata(1.0, OnScaleToImageChanged));
private   static  void OnScaleToImageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
	 {
	 		DrawingObject obj = d as DrawingObject;
            if (obj is Rect1DrawingObject)
            {
                (obj as Rect1DrawingObject).UpdateDrawObjectScaleToImageChange();
            }
            else if(obj is CircleDrawingObject)
            {
                (obj as CircleDrawingObject).UpdateDrawObjectScaleToImageChange();
            }
            else if(obj is LineDrawingObject)
            {
                (obj as LineDrawingObject).UpdateDrawObjectScaleToImageChange();
            }
            else if(obj is Rect2DrawingObject)
            {
                (obj as Rect2DrawingObject).UpdateDrawObjectScaleToImageChange();
            }
     }

附上demo的效果,也是參考的Halcon&WPF的例程,在Rect1Object的OnDrag回調(diào)函數(shù)中執(zhí)行Sobel元素。
基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口
基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口
基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口文章來源地址http://www.zghlxwxcb.cn/news/detail-407486.html

到了這里,關(guān)于基于WPF Opencv實(shí)現(xiàn)一個(gè)圖像可移動(dòng)、縮放和可交互的顯示窗口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • OpenCV 筆記(23):圖像的縮放——圖像的縮放——立方插值、Lanczos 插值算法

    OpenCV 筆記(23):圖像的縮放——圖像的縮放——立方插值、Lanczos 插值算法

    立方插值算法也被稱為雙三次、雙立方插值算法。 先介紹一下三次插值算法,它是一種使用三次多項(xiàng)式擬合一組數(shù)據(jù)的插值方法。三次插值通常用于圖像縮放和重采樣。 三次插值的實(shí)現(xiàn)方式有很多種,例如牛頓多項(xiàng)式插值、拉格朗日多項(xiàng)式插值、Hermite 三次多項(xiàng)式插值、三次

    2024年04月26日
    瀏覽(28)
  • 【OpenCV ? c++】圖像幾何變換 | 圖像縮放

    【OpenCV ? c++】圖像幾何變換 | 圖像縮放

    ?? 個(gè)人簡(jiǎn)介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專 ?? 欄: 【OpenCV ? c++】計(jì)算機(jī)視覺 ?? 若有幫助,還請(qǐng) 關(guān)注?點(diǎn)贊?收藏 ,不行的話我再努努力??????

    2024年02月16日
    瀏覽(25)
  • (opencv)圖像幾何變換——縮放

    (opencv)圖像幾何變換——縮放

    圖像縮放是指將圖像的尺寸變小或變大的過程,也就是減少或增加源圖像數(shù)據(jù)的像素個(gè)數(shù)。圖像縮放一定程度上會(huì)造成信息的丟失,因此需要考慮適宜的方法進(jìn)行操作。 下面介紹兩種常用的圖像縮放方法的原理及實(shí)現(xiàn) 1.基于等間隔提取圖像縮放 等間隔提取圖像縮放是通過對(duì)

    2024年02月16日
    瀏覽(29)
  • Python Opencv實(shí)踐 - 圖像縮放

    Python Opencv實(shí)踐 - 圖像縮放

    ? ? ?

    2024年02月13日
    瀏覽(27)
  • 【OpenCV】圖像變換(縮放、平移、旋轉(zhuǎn)、仿射)

    圖像變換是指通過對(duì)圖像進(jìn)行縮放、平移、旋轉(zhuǎn)、仿射、透視等變換來改變圖像的形狀和大小。在本篇博客中,我們將詳細(xì)介紹OpenCV中的圖像變換函數(shù),并提供示例代碼以幫助讀者更好地理解這些函數(shù)的使用方法。 縮放變換是指通過改變圖像的大小來改變圖像的形狀。在Op

    2024年02月07日
    瀏覽(94)
  • opencv 圖像的縮放(放大,縮小),翻轉(zhuǎn),旋轉(zhuǎn)

    opencv 圖像的縮放(放大,縮小),翻轉(zhuǎn),旋轉(zhuǎn) opencv 最常用的圖像縮放方法是使用 cv2::resize() 函數(shù),它需要指定輸出圖像的大小,和插值算法; opencv 最常用的圖像翻轉(zhuǎn)方法是使用 cv::flip() 函數(shù),它需要指定圖像翻轉(zhuǎn)方式; opencv 最常用的圖像旋轉(zhuǎn)方法是使用 cv::warpAffine() 函數(shù),

    2024年02月07日
    瀏覽(86)
  • OpenCV圖像的仿射變換、旋轉(zhuǎn)和縮放

    OpenCV圖像的仿射變換、旋轉(zhuǎn)和縮放

    以下是對(duì)代碼的逐行解釋:

    2024年02月13日
    瀏覽(86)
  • opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    opencv006圖像處理之仿射變換(旋轉(zhuǎn),縮放,平移)

    空間變換中的仿射變換對(duì)應(yīng)著五種變換,平移,縮放,旋轉(zhuǎn),翻轉(zhuǎn),錯(cuò)切。而這五種變化由原圖像轉(zhuǎn)變到變換圖像的過程,可以用仿射變換矩陣進(jìn)行描述。而這個(gè)變換過程可以用一個(gè)2*3的矩陣與原圖進(jìn)行相乘得到。關(guān)鍵就是這個(gè)矩陣M: ?平移,旋轉(zhuǎn)? ?透視 M: 變換矩陣 desi

    2024年01月21日
    瀏覽(95)
  • opencv-22 圖像幾何變換01-縮放-cv2.resize()(圖像增強(qiáng),圖像變形,圖像拼接)

    opencv-22 圖像幾何變換01-縮放-cv2.resize()(圖像增強(qiáng),圖像變形,圖像拼接)

    幾何變換是計(jì)算機(jī)圖形學(xué)中的一種圖像處理技術(shù),用于對(duì)圖像進(jìn)行空間上的變換,而不改變圖像的內(nèi)容。這些變換可以通過對(duì)圖像中的像素位置進(jìn)行調(diào)整來實(shí)現(xiàn)。 常見的幾何變換包括: 平移(Translation) :將圖像在水平和/或垂直方向上進(jìn)行平移,即將圖像的每個(gè)像素沿著指

    2024年02月15日
    瀏覽(22)
  • 用OpenCV實(shí)現(xiàn)創(chuàng)建一個(gè)新的圖像并排顯示左右兩個(gè)輸入圖像

    創(chuàng)建一個(gè)并排顯示左右兩個(gè)輸入圖像程序的關(guān)鍵在于正確地使用 OpenCV 的 cv::Mat 類和圖像處理函數(shù)。 下面是一個(gè)簡(jiǎn)單的示例代碼,展示了如何實(shí)現(xiàn)這個(gè)功能。 這段代碼假設(shè)你已經(jīng)有了兩個(gè)圖像文件(左圖和右圖),并將它們并排顯示在一個(gè)窗口中。 請(qǐng)確保在您的系統(tǒng)上安裝

    2024年01月18日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包