darknet을 학습시키고, 데모를 돌릴 때에 1920x1080 풀 사이즈 이미지를 이용하면 오브젝트 이미지가 상대적으로 너무 작아서 학습및 검출이 잘 안 된다.
학습은 이미지를 반으로 잘라서 시키면 어느 정도 되는데,
demo를 돌릴 때에도 반으로 잘라서 제공해야 한다.
1. 일단 좌측 반을 이용하는 코드.
~/darknet/src$ vi image_opencv.cpp
image get_image_from_stream(void *p)
{
VideoCapture *cap = (VideoCapture *)p;
Mat m;
*cap >> m;
if(m.empty()) return make_empty_image(0,0,0);
//return mat_to_image(mr);
Mat mr = m(Rect(0,0, m.cols/2, m.rows));
printf("image get_image_from_stream w=%d, h=%d\r\n", mr.cols, mr.rows);
return mat_to_image(mr);
}
2. 이건 좌측 반과 우측 반을 이용해서 전체 이미지를 재생성하는 부분
// MODIFIED
Mat msave;
int monce = 0;
image get_image_from_stream(void *p)
{
VideoCapture *cap = (VideoCapture *)p;
if(monce == 0) {
monce = 1;
*cap >> msave;
if(msave.empty()) return make_empty_image(0,0,0);
Mat mr = msave(Rect(0,0, msave.cols/2, msave.rows));
printf("image get_image_from_stream w=%d, h=%d\r\n", mr.cols, mr.rows);
return mat_to_image(mr);
}
else {
monce = 0;
Mat mr = msave(Rect(msave.cols/2,0, msave.cols/2, msave.rows));
printf("image get_image_from_stream w=%d, h=%d\r\n", mr.cols, mr.rows);
return mat_to_image(mr);
}
}
// MODIFIED
Mat showL;
int show0 = 0;
int show_image_cv(image im, const char* name, int ms)
{
if(show0 == 0) {
show0 = 1;
showL = image_to_mat(im);
return -1;
}
show0 = 0;
Mat mR = image_to_mat(im);
Mat m;
hconcat(showL, mR, m);
imshow(name, m);
int c = waitKey(ms);
if (c != -1) c = c%256;
return c;
}
'TensorFlow OpenCV' 카테고리의 다른 글
CUDA10.0, cuDNN, Anaconda, Pycharm (0) | 2019.10.30 |
---|---|
python file example 개행문자 \r 없애기 (0) | 2019.10.05 |
darknet 라벨링 정리 2019. 8. 26. 17:17 (0) | 2019.10.05 |
darknet 빌드 중에 opencv.pc가 없다고 나올 때 2019. 8. 25. (0) | 2019.10.05 |
Ubuntu 18.04 CUDA + opencv-3.4.0 2019. 8. 25. 12:25 (0) | 2019.10.05 |