由于遥感影像通常是TIFF数据,OPENCV读取TIFF会出问题,所以采用了先用GDAL读取数据以及影像信息,再转换为OPENCV的Mat类型,这样结合了GDAL强大的支持多种数据格式的能力,又能方便地调用OPENCV的算法函数。
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <gdal.h>
#include <gdal_priv.h>
#include <highgui.h>
using namespace cv;
Mat RegionGrow(Mat src,Point2i pt,int th)
{
GDALAllRegister();
Point2i ptGrowing;//待生长点位置
int nGrowLable=0;//标记是否生长过
int nSrcValue=0;//生长起点灰度值
int nCurValue=0;//当前生长点灰度值
Mat matDst=Mat::zeros(src.size(),CV_8UC1);//创建一个空白区域,填充为黑色
//生长方向顺序数据
int DIR[8][2]={
{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};
Vector<Point2i> vcGrowPt;//生长点线
vcGrowPt.push_back(pt);//将生长点压入栈中
matDst.at<uchar>(pt.y,pt.x)=255;//标记生长点
nSrcValue=src.at<uchar>(pt.y,pt.x);
while(!vcGrowPt.empty())//生长栈不为空则生长
{
pt=vcGrowPt.ba