畫內輪廓、csv2xml、txt、粗劣膨脹

一、記錄一下,以前沒有畫過內輪廓,知道有嵌套輪廓這個選項,但沒畫過,原來是這樣畫的:

int main()
{
	Mat src(200,500,CV_8UC1,Scalar(0));
	cv::circle(src,Point(100,50),50,Scalar(255),-1);
	cv::circle(src,Point(100,20),5,Scalar(0),-1);
	cv::circle(src,Point(110,35),5,Scalar(0),-1);

	cv::circle(src,Point(300,120),50,Scalar(255),-1);
	cv::circle(src,Point(300,90),5,Scalar(0),-1);
	cv::circle(src,Point(310,140),10,Scalar(0),-1);
//	imwrite("src.jpg",src);
	vector<Vec4i> hierarchy;
	hierarchy.clear();
	std::vector<std::vector<cv::Point> > pContour;
	pContour.clear();

	Mat temp_black_img(200,500,CV_8UC1,Scalar(0));
	findContours(src, pContour, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
//	cout<<pContour.size()<<endl;
	for(int i=0;i!=pContour.size();i++)
	{
//		cout<<i<<" "<<pContour.size()<<" "<<hierarchy[i].val[0]<<" "<<hierarchy[i].val[1]<<" "<<hierarchy[i].val[2]<<" "<<hierarchy[i].val[3]<<endl;
		if(hierarchy[i].val[3]>=0)
		{
			drawContours(temp_black_img,pContour,i,Scalar(255),CV_FILLED);
		}
	}

//	imwrite("tmp.jpg",temp_black_img);
	return 0;
}

結果:

二、csv2xml 

 將csv轉成xml文件,xml的讀取

char valve_name[100];
	FileStorage fswrite("mathyaogangxian.xml",FileStorage::WRITE);
	Ptr<ml::TrainData> ygdata=cv::ml::TrainData::loadFromCSV("/home/jumper/Ore_try/YaoGangXian/images/update.csv",0,-2,0);
	Mat csvimg2=ygdata->getSamples();
	int csvrows=csvimg2.rows;

	for (int j = 0; j < csvrows; j++)
	{
			float* pixeldata = csvimg2.ptr<float>(j);
			int x = pixeldata[0];
//			cout<<x<<endl;
			sprintf(valve_name,"valve%d",j);
			fswrite<<valve_name<<x;
	}
	fswrite.release();

	//	FileStorage fsread("test.xml",FileStorage::READ);
	//	Mat dst;
	//	fsread["src1"]>>dst;
	//	cout<<dst<<endl;
	//	fsread.release();
	//	cout<<"Reaed Finished"<<endl;

三、txt

ofstream outfile11("low14.txt",ios::out);
	for(int r=0;r<m;r++)
	{
		for(int c=0;c<n;c++)
		{
			float data =coefficient[r][c];   //最終txt裏寫入的是mxn的trainDescription矩陣
			outfile11<<data<< "\t" ;
		}
		outfile11<<endl;
	}


//	ifstream filein1("wg20181126.txt");
//	float everycol[448][2];
//	for(int i=0;i<448;i++)
//	{
//		filein1>>everycol[i][0]>>everycol[i][1];
//	}
//	filein1.close();

記錄一下這些小tips,每次用時以免重複寫。

三、自適應膨脹

想把圖中綠色(原本不是綠色,原本是黑灰色)區域膨脹大,最好能能膨脹到整個目標區域但opencv的膨脹只能從輪廓往周圍均勻的擴充N,但這綠色區域有的挨近邊了,需要膨脹得少,有的距離邊很遠需要膨脹很多。所以不能用統一的size。我試着寫了一個粗劣版本,暫時我覺得可以用。還需要完善。等我有時間了再完善。

四、將8bit---->1 uchar

valve_result_[r][c]=0;
				(valve_result_[r][c]) |= valve_temp_result_[r][c*8];
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+1]<<1);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+2]<<2);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+3]<<3);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+4]<<4);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+5]<<5);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+6]<<6);
				(valve_result_[r][c]) |= (valve_temp_result_[r][c*8+7]<<7);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章