一、記錄一下,以前沒有畫過內輪廓,知道有嵌套輪廓這個選項,但沒畫過,原來是這樣畫的:
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);