Opencv形态学滤波-综合
2015-09-17 23:07
489 查看
#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; Mat srcImage, dstImage; int g_nDilorEro = 0, g_nValue = 0, g_nWay = 0; Mat DilateElement, ErodeElement, Element; //有滚动条事件时,可以进入回调函数 void on_Trackbar(int, void *) { if (g_nDilorEro == 0) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_DILATE, Element); imshow("【形态学滤波窗口】", dstImage); } else if (g_nDilorEro == 1) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_ERODE, Element); imshow("【形态学滤波窗口】", dstImage); } else if (g_nDilorEro == 2) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_OPEN, Element); imshow("【形态学滤波窗口】", dstImage); } else if (g_nDilorEro == 3) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_CLOSE, Element); imshow("【形态学滤波窗口】", dstImage); } else if (g_nDilorEro == 4) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_GRADIENT, Element); imshow("【形态学滤波窗口】", dstImage); } else if (g_nDilorEro == 5) { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_TOPHAT, Element); imshow("【形态学滤波窗口】", dstImage); } else { Element = getStructuringElement(g_nWay, Size(2 * g_nValue + 1, 2 * g_nValue + 1)); morphologyEx(srcImage, dstImage, CV_MOP_BLACKHAT, Element); imshow("【形态学滤波窗口】", dstImage); } } int main() { srcImage = imread("tiger.jpg"); imshow("【原图】", srcImage); dstImage.create(srcImage.size(), srcImage.type()); //选择形态学滤波方式 0代表是膨胀运算,1代表是腐蚀运算,2代表是开运算,3代表是闭运算,4代表是形态学梯度,5代表是顶帽 //6代表是黑帽 namedWindow("【滚动条窗口】"); createTrackbar("1234567", "【滚动条窗口】", &g_nDilorEro, 6, on_Trackbar); on_Trackbar(g_nDilorEro, 0); createTrackbar("Value", "【滚动条窗口】", &g_nValue, 100, on_Trackbar); on_Trackbar(g_nValue, 0); createTrackbar("way", "【滚动条窗口】", &g_nWay, 2, on_Trackbar); on_Trackbar(g_nWay, 0); char c; char name[50]; int num = 0; while (1) { //获取按键值 c = waitKey(0); //如果按下键盘的Esc就表示是退出 if (c == 27) break; //如果按下空格键就保存照片 if (c == 32) { sprintf(name, "照片%d.jpg", num++); imwrite(name, dstImage); } } return 0; }
相关文章推荐
- Linux 脚本 命令状态 条件测试
- Kurento应用开发指南(以Kurento 6.0为模板) 之六:kurento架构
- Mac 下配置Tomcat环境
- openstack 之 ceilometer: Sample
- opencv Mat 与IplImage 转换
- 新站4个月,新手做网站经验总结
- Linux下DRBD配置
- linux下jar命令与jar包
- 使用squid做出口防火墙
- ubuntu kylin上部署hadoop源码环境
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- 决定学linux了
- Linux信号编程实践(三) 信号在内核中的表示(sigaction&sigqueue)