Ribbon+Opencv 2.4--实现一个简单的Opencv图像处理小工具

    放假路上几天加上在北京弄了三天FPGA,有一周没更新博客了,昨天终于回到家,今天学点东西写写博客吧,东西很简单不过也算假期之旅的不错开始啊敲打

    昨天看豆子的《Qt5学习之路2》的时候发现了一个叫Ribbon的东西,好像是做界面的据说还挺酷的,今天就在网上找了找这方面的东西,发现大部分是官方文档,硬着头皮找了篇文档做了一遍,感觉Ribbon这东西做界面确实很炫酷啊大笑。所以就想何不用它做个Opencv图像处理的小工具呢,放上一些按钮实现最基本的图像处理算法,比如中值滤波,Laplace增强,Canny边缘检测等等,这样以后再用这些算法也省得重写了不是,所以今天中午开始写了个小雏形吧,感觉呢确实很方便,在复习之前基本算法的同时顺手不断完善这个小工具吧!!奋斗

    今天主要做了图片的加载,和一个Laplace图像增强变换,算是一个测试吧。

   这里对程序的一些需要注意的地方做下说明吧。

  •  Mat、IplImage和CvvImage间的转换

  由于2.4.x后Mat的出现,其带来的操作方便,内存分配与释放都是自动执行的一些优点都得到了大家的欢迎,所以对于算法的实现都是基于Mat类型的。但是由于在MFC中通过Opencv显示图片并不是那么简单,而在Opencv2.2中提供的CvvImage类很好的解决了这个问题(2.4.x去掉了这个类,这里我们重新引入了这个类),所以,Mat、CvvImage和IplImage之间的转换就成为了一个很重要的地方,这里对它们三者之间的转换做了一下总结

IplImage -> Mat
Mat::Mat(const IplImage* img, bool copyData=false);/*default copyData=false,与原来的IplImage共享数据,只是创建一个矩阵头*/
例子:
IplImage* iplImg = cvLoadImage("greatwave.jpg", 1);
Mat mtx(iplImg); /* IplImage * -> Mat,共享数据; or : Mat mtx = iplImg;*/

 

Mat -> IplImage
Mat M
IplImage iplimage = M; /*只创建图像头,不复制数据*/

CvMat -> Mat
Mat::Mat(const CvMat* m, bool copyData=false); /*类似IplImage -> Mat,可选择是否复制数据*/

Mat -> CvMat
例子(假设Mat类型的imgMat图像数据存在):
CvMat cvMat = imgMat;/*Mat -> CvMat, 类似转换到IplImage,不复制数据只创建矩阵头


这段代码是对源图像进行Laplace变换的代码,是放在void CFirstMFC1Doc::OnCanny()执行的,注意这里虽然叫Canny但是做的是Laplace变换,忘记改了不好意思,按钮的Canny也是Laplace变换功能

void CFirstMFC1Doc::OnCanny()
{
	// TODO: 在此添加命令处理程序代码
	cv::Mat mtx(originImage);
	cv::Mat mat_gray;
	int kernel_size = 3;

	cv::GaussianBlur(mtx , mtx ,cv::Size(3,3),0,0,cv::BORDER_DEFAULT);
	cv::cvtColor(mtx, mat_gray,CV_RGB2GRAY);

	cv::Mat dst,dstabs;
	cv::Laplacian(mat_gray , dst , CV_16S, kernel_size,1,0,cv::BORDER_DEFAULT);
	cv::convertScaleAbs(dst,dstabs);
	IplImage tempImg = dstabs;
	processedImg.CopyOf(&tempImg,-1);
	m_openImage = TRUE;
	UpdateAllViews(NULL);
}

整个程序参考了微软的示例程序,实现了按钮的使能是失效,以及滚动条放大缩小图片功能, 示例链接,最后加入了Opencv

  这是程序截图和完整工程的下载链接,大家可以根据自己的需求来增加功能!

  




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值