C#的Winform中用來顯示圖片的控件是PictureBox,而Emgucv中顯示圖片用的是ImageBox。
1.ImageBox屬性
在WinForm中,單擊ImageBox控件,右擊查看屬性頁
(1)FunctionalMode:
Minimun:鼠標在圖像上的任何操作失效
RightClickMenu:僅鼠標右鍵有效
PanAndZoom:僅鼠標滾輪縮放有效
Everything:鼠標滾輪、左鍵框選、右鍵功能均生效。
2.使用方式
(1)按照上篇Emgucv配置;
(2)在工具箱中查找ImageBox控件,拖入winform設計窗體。
(3)通過按鈕事件為ImageBox填充圖片
private void btnReadLocalPic_Click(object sender, EventArgs e)
{
OpenFileDialog ofdOpenLocalImage = new OpenFileDialog();
ofdOpenLocalImage.InitialDirectory = @"C:\Users\Public\Pictures"; //設置默認路徑
ofdOpenLocalImage.Title = "請選擇要打開的圖片";
ofdOpenLocalImage.Multiselect = true;
ofdOpenLocalImage.Filter = "jpg圖片|*.jpg|jpeg圖片|*.jpeg|bmp圖片|*.bmp|png圖片|*.png|pdf文件|*.pdf";
ofdOpenLocalImage.CheckFileExists = true;
ofdOpenLocalImage.Multiselect = false;
if (ofdOpenLocalImage.ShowDialog(this) == DialogResult.OK)
{
Image<Bgr, byte> img = new Image<Bgr, byte>(ofdOpenLocalImage.FileName);
this.imgbShow.Image = img;
}
else
{
MessageBox.Show("你沒有選擇圖片");
}
}
(4)使用中有遇到使用上面程序,正確編譯了,但在執行到圖像讀取位置時,出現了異常,單點調試,問題出現在下面這一句:在文件Image.cs中
private void LoadImageUsingOpenCV(FileInfo file)
{
using (Mat m = CvInvoke.Imread(file.FullName, CvEnum.LoadImageType.AnyColor | CvEnum.LoadImageType.AnyDepth))
{
if (m.IsEmpty)
throw new NullReferenceException(String.Format("Unable to load image from file \"{0}\".", file.FullName));
LoadImageFromMat(m);
}
}
通過將Emgucv安裝包下bin目錄下下面幾個文件復制到工程文件的Debug或Release下即可
3.擴展應用
(1)如何設置通過鼠標滾輪來對圖像進行縮放(以圖像中心為原點)?