在获取负样本时就算用Ps进行切片也比较麻烦,上了几千就麻烦的要死,好吧,网上找合适的程序好麻烦,自己动手写了个小程序。由于不熟悉,参考别人的代码,直接上
这里写代码片
#include<iostream>
#include<opencv/cv.h>
#include<opencv/highgui.h>
using namespace std;
using namespace cv;
char filename[150];
char windowname[150];
char negname[100];
char ImageName[100];
Mat p;
//IplImage *p;
IplROI *pp;
Mat roi;
int c = 1;
unsigned char *Readfigsmethod1(int num)
{
for (int m = 1; m < num; m++)
{
sprintf(filename, "F:/vs/ImageDivision/ImageDivision/%d.jpg", m);
sprintf(windowname, "window%d.jpg", m);
//p = cvLoadImage(filename, 1);
p = cvLoadImage(filename, 1);
cvNamedWindow(windowname, CV_WINDOW_AUTOSIZE);
//cvShowImage(windowname, q);//显示图片
imshow(windowname, p);
//cvWaitKey();
int i = 0, j = 0;
int width = 20, height = 24;
for (i; i != p.cols; i = i + width)
{
for (j; j != p.rows; j = j + height)
{
roi = p(Rect(i, j, width, height));
sprintf(ImageName, "F:/vs/readSequenceImage/readSequenceImage/image/neg%d%s", c, ".bmp");
c++;
//cvSaveImage(ImageName, roi);
imwrite(ImageName, roi);
//j=j*iC;
}
//i = i*iR;
j = 0;
}
}
return 0;
}
int main()
{
//Mat p = imread("");
Readfigsmethod1(4);
cvWaitKey();
cvDestroyAllWindows();
system("pause");
return 0;
}
不熟悉啊。。知道mat用rect可以分割图片了,如果是用IplImage开辟空间的话p->下有个roi可是弄了好久弄不成…回头再看吧…
今天在写代码时的一点体会:
1.在读入多张图片时,char一个变量用来表示文件的名字,之前不明白为什么短短的名字为毛不直接给10个字节就够了,断点跑后发现路径也占了空间,如果直接char p[10]会导致连路劲都放不完,读取图片失败,即一片灰。
2.还有一片灰的一种情况是imshow(windowname, p);时windowname写成了“window%d.jpg”,好离奇的错误…看了好一会才看出来。。。
3.在写将图片切片时粗心没算好横纵坐标比例,导致内存溢出,重新计算就好了。
4.在正样本50,负样本3232,前两层很快就出来了,第三层用了十多秒,第四城又在那卡着,等结果。