"

晨光彩票下载_v7.1.6版下载拥有全球最顶尖的原生APP,每天为您提供千场精彩体育赛事,晨光彩票下载_v7.1.6版下载更有真人、彩票、电子老虎机、真人电子竞技游戏等多种娱乐方式选择,晨光彩票下载_v7.1.6版下载让您尽享娱乐、赛事投注等,且无后顾之忧!

"
首頁 > Silverlight 4 中攝像頭的運用—part1

Silverlight 4 中攝像頭的運用—part1

互聯網 2021-03-04 14:48:16

入的視頻

攝像頭經過一個Video對象就能讓你看到視頻,而這個對象是一個顯示對象,所以顯示對象能做得事情,它都能做,比如濾鏡,變形,混合模式等等。當然最強大的還是使用WriteableBitmap畫出視頻內容。這樣,通過圖像分析、 比較等等,對于圖像處理來說就有著無限可能。

這里來看看如何引用攝像頭并看到拍攝的視頻。===================================

public partial class MainPage : UserControl{CaptureSource _captureSource;VideoCaptureDevice _video;public MainPage(){InitializeComponent();_captureSource = new CaptureSource();_video = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();if (_video != null) {_captureSource.VideoCaptureDevice = _video;}btnStart.Click += new RoutedEventHandler(btnStart_Click);}void btnStart_Click(object sender, RoutedEventArgs e){if (CaptureDeviceConfiguration.AllowedDeviceAccess ||CaptureDeviceConfiguration.RequestDeviceAccess()){_captureSource.Start();}}}

有了攝像頭,就該輸出視頻了。把攝像頭的數據作為視頻刷子賦值到Rectangle對象上即可,再把Rectangle加入到場景中。===================================

public partial class MainPage : UserControl{CaptureSource _captureSource;VideoCaptureDevice _video;VideoBrush _videoBrush;Rectangle _rect;public MainPage(){InitializeComponent();_captureSource = new CaptureSource();_video = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();if (_video != null) {_captureSource.VideoCaptureDevice = _video;_videoBrush = new VideoBrush();_videoBrush.SetSource(_captureSource);}btnStart.Click += new RoutedEventHandler(btnStart_Click);}void btnStart_Click(object sender, RoutedEventArgs e){if (CaptureDeviceConfiguration.AllowedDeviceAccess ||CaptureDeviceConfiguration.RequestDeviceAccess()){_rect = new Rectangle();_rect.Width = 300;_rect.Height = 225;_rect.Fill = _videoBrush;LayoutRoot.Children.Add(_rect);_captureSource.Start();}}}

===================================視頻尺寸和質量場景上出現了攝像頭拍攝的內容。但畫面不夠大,也不像其它看到的視頻那樣清晰。這不是因為Silverlight不行,而是由于默認的設置不好。視頻可以在創建時設置其大小,默認是640x480。我們可以查看Video對象。

這里可知他一共支持了21種格式。通過簡單的設置便可以更改攝像頭的清晰度。

_video.DesiredFormat = _video.SupportedFormats[3];要知道,越高的fps,機器在處理視頻時越費勁。對于類似視頻會議這種東西,視頻的質量和尺寸并不是非常重要,所以不要為此花太大精力。

視頻和位圖

正如之前說的,攝像頭最強大的應用是混合WriteableBitmap。所以,通過Render把視頻繪制在一個WriteableBitmap對象里,就能以像素級來控制整個東西了。當然,對于動畫,就需要不停的繪制。===================================

void btnStart_Click(object sender, RoutedEventArgs e){if (CaptureDeviceConfiguration.AllowedDeviceAccess ||CaptureDeviceConfiguration.RequestDeviceAccess()){_rect = new Rectangle();_rect.Width = 320;_rect.Height = 240;_rect.Fill = _videoBrush;_rect.Visibility = Visibility.Collapsed;LayoutRoot.Children.Add(_rect);_wb = new WriteableBitmap(_rect, null);_wb_image = new Image();_wb_image.Width = 320;_wb_image.Height = 240;_wb_image.Source = _wb;LayoutRoot.Children.Add(_wb_image);_captureSource.Start();_isEnableCamera = true;}}void OnRender(object sender, EventArgs e){if (_isEnableCamera){_wb.Render(_rect, null);_wb.Invalidate();}}

===================================

反轉圖像要知道,用戶在攝像頭前所做的反應,總希望和鏡子中一樣,人往左,視頻中人也往左,人往右,其也往右。但事實并不是這樣,所以需要我們來為之做反轉圖像。?===================================

void OnRender(object sender, EventArgs e){if (_isEnableCamera){MatrixTransform transform = new MatrixTransform();transform.Matrix = new Matrix(-1, 0, 0, 1, 320, 0);_wb.Render(_rect, transform);_wb.Invalidate();}}

===================================

對象的繪制以傳入的變形矩陣為依據。通過矩陣能做很多事情,雖然只有很簡單的前四個參數,它們卻控制著縮放,旋轉和形變。這里讓圖形的x軸縮放率等于 -1,意味著水平反轉它。接著,0的意思是指圖形沒有旋轉和形變,最后一個1是說y軸保持100%不變。但僅僅如此,還看不到任何東西。因為此時的矩陣是從右向左擴展的,而最后兩個參數是把矩陣移到圖形的右上角,這樣就保證落入了可視范圍。

分析像素現在你擁有了像素的控制權,該如何處置?記得我之前說過不要高質量、高分辨率的視頻嘛?我現在要更進一步的說,越低分辨率、越低質量越好。就算只有320x240大小的視頻圖像,每一幀要處理的像素也有76800個啊。所以不要搞太大的視頻來玩。事實上,你將會發現我要做的第一件事情,是設計如何除掉這么多像素帶來的巨大信息。一般來說,我們只對視頻的某個顏色區域,或者對比度之類的感興趣。

分析顏色

首先我們嘗試著跟蹤一個具體顏色。假如用戶拿一個顏色(紅色)比較突出的東西在攝像頭前面晃動,我們能跟蹤其位置就算成功。

首先了解一下像素數組的排列方式。

所以像素的算法是

int pixel = bmSource.Pixels[y * imageWidth + x]

接下來根據pixel 反向算回顏色

Color color = Color.FromArgb((byte)((pixel >> 24) & 0xff),(byte)((pixel >> 16) & 0xff),(byte)((pixel >> 8) & 0xff),(byte)((pixel) & 0xff));

有了以上的原理就可以分析WriteableBitmap的顏色了。

本文參與騰訊云自媒體分享計劃,歡迎正在閱讀的你也加入,一起分享。

免責聲明:非本網注明原創的信息,皆為程序自動獲取互聯網,目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,并提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件12小時內刪除。

一周熱門

查看更多
晨光彩票下载_v7.1.6版下载 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>