C++使用OpenCV开发带界面程序总结
概述
OpencCV自身已经带了GUI界面,这个作处理结果检测是够用的,但是要产品化,界面就显得有点不专业(可能是自己研究不够),所以就得使用一些相关的C#、MFC、QT等来完成用户交互界面。现在就对做一个比较。
C#
C#调用OpenCV需要使用OpenCVSharp库,是此库相对简单,但是如果需要在OpenCV定义自己的算法,就无法满足。想使用OpenCV原始的方法可以满足要求。如果项目侧重的是OpenCV算法优化,这个就无法满足。就需要你是先自己的C++动态库,再在C#中调用(这个可以参考C#调用C++动态库)。
private void OpenButton_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
file.InitialDirectory = ".";
file.Filter = "所有文件(*.*)|*.*";
file.ShowDialog();
if (file.FileName != string.Empty)
{
try
{
pathname = file.FileName; //获得文件的绝对路径
this.pictureBox1.Load(pathname);
//opencv加载图片
Mat src = new Mat(pathname, ImreadModes.Color);
Cv2.ImShow("C#测试OpenCV",src);
Cv2.WaitKey(0);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
具体实现可以参考链接(https://www.cnblogs.com/jsxyhelu/p/9669583.html)
MFC
MFC本身是使用C++开发的,OpenCV也是,可以做到无缝调用。但是要将OpenCV保存图片结构(Mat)转换成MFC图片结构(IplImage)感觉有点麻烦(可能是自己对MFC使用不多).
QT
QT本身也是使用C++开发的,可以直接调用OpenCV函数。自己感觉优点就是OpenCV转换成QT图片结构比较简单,一个函数就搞定,另外一个优点就是可以跨平台(如果没有跨平台要求,这个就不算优点,哈哈)。
Mat image = imread(str);
cvtColor(image, image, COLOR_BGR2RGB);
cv::resize(image, image, Size(300, 200));
QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB888);
总结
如果只是简单图片处理,直接使用C#(自己感觉目前做单机界面比较简单),如果项目侧重在OpenCV算法,建议使用MFC或者QT(那个熟悉就用那个),有跨平台要求建议使用QT。
例子代码工程https://download.csdn.net/download/scy518/14952990