这个项目开始也有一段时间了,前面一部分做的是河流提取,利用遥感卫星TM图像的TM1、TM4波段进行基于Otsu算法的阈值分割提取河流。河冰这部分一直在看以前一个类似项目的源代码,初步发现是利用的hsv图像的v通道进行阈值分割。先把图像分成h、s、v三个通道,然后对v通道进行滤波,滤波方式还没有确定,比较了一些效果之后打算用双边滤波,然后好像还有一个mask,其中有个cvRange函数,一直不知道是干嘛用的,而且还没有找到函数代码。
先要把需要提取的部分分离出来,这部分可以利用前面的河流提取,明天争取把代码初步实现一下。。。
2015.8.8
学习了c#界面制作,在一个button上添加打开图片的属性,不光是button,所有的控件上都可以添加这么个属性,代码如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"> private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "请选择图片";
ofd.Filter = "图片文件|*.jpg|图片文件|*.bmp|图片文件|*.png|图片文件|*.jpeg";
ofd.ShowDialog();
string path = ofd.FileName;
if (path == "") return;
Bitmap Mybitmap = new Bitmap(path);
pictureBox1.Image = Mybitmap;
}</span></span>
其中OpenFileDialog就是一个类,在使用非静态类的时候需要先声明一个new,然后ofd.title就是在打开的窗口上面显示的名字,Filter是对文件进行筛选,此处只可以打开图像文件,还有其他能不能一次打开多个文件等等之类的方法,利用path获取返回的文件路径,然后新建一个位图传给picturebox,添加一句picturebox.image = Mybitmap,就可以把图像显示出来了。
2015.8.9
emgucv3.0 + vs2013 + win10的项目配置,网上相关代码也不多,虽然手头上有相关项目,但是代码还是得一行一行的改,而且emgucv3.0的变化还是挺大的,正好有一本opencv3.0的书,还可以用来参考。
emgucv3.0对Mat类的初始化要用Mat img = new Mat(size,imgdepth,imgchannel);
2015.8.11
没想到emgucv3.0竟然直接里的split函数的参数竟然变了,目标图像竟然变成了vector类型,也就是说如果我要把一个图片的三个通道分离出来竟然是需要利用vector的,但是我在网上找了很久,发现在C#里面是没有vector的,这可不知道怎么办了,我在上面声明一个Vector<Mat>,函数果然不报错了,变成了Vector报错,而如果不用Vector的话函数则一直报错,也找不到相关的资料,我只好又换成了emgucv2.4.9。
第二个问题,在C#中声明image<TCOLOR,TDEPTH>的时候竟然会报错,不论我把COLOR那部分写成什么都会说缺少相关定义或头文件,image不本来就是C#Drawing命名空间的嘛,怎么会这样,又是找了很久,原来是缺少了一个头文件,Emgu.CV.Structure,也不知道这个头文件是干嘛用的,而且好像在Emgucv的文件夹里面也没有找到这个头文件,可能是我漏了吧,感觉挺圆满的,不断的发现问题,然后去解决问题,可是还有一部分用opencv3.0的C++代码没有改完呢。。。。