새로운 버그
위에 보는 것과 같이 중심점으로 부터 첫 시작점을 찾기 위해 위로 올라가는 중 만나는 노이즈의
흰 점이 있는데..그점을 주위를 보면
9개의 픽셀영역중에 a지점만 흰 영역이 되기 때문에...분류기에 없는 상황이 되어...
분류기의 기능을 잃게 된다...그래서..이 경우는 아예 인식하는 소스 자체에서 나와..
컬러코드인식변수는 FALSE로 한 후 다음 프레임부터는 인식을 하지 않게 하여
디버그에러가 나지 않게 하였다..
인터페이스 수정및 색정렬
녹색을 기준으로 하여 색을 정렬 하였다..
만약 녹색 정보가 없으면 색을 아예 다 날려 검은 색으로 나오게 하였다..
녹색주위에 노이즈가 꽤 많아서..하나만 쓰는 녹색으로 기준을 잡았다..
대화상자에 동영상뿌리기 - 소스첨부
3. View 클래스 OnDraw(CDC* pDC)
- pDC 화면에 일일이 픽셀 하나씩 점을 찍으니 로드되는 시간이 너무 길다.
그래서 메모리 비트맵을 사용하기로 했다.
// (속도 개선을 위해 비트맵이용해서 비트맵에 그린 후에 화면에 전송하기 이용)
CDC MemDC;
if (MemDC.GetSafeHdc() == NULL)
{
MemDC.CreateCompatibleDC(pDC); //화면 pDC와 호환되는 메모리DC 생성
}
CBitmap bmp;
CBitmap* pOldBmp= NULL;
bmp.CreateCompatibleBitmap(pDC, pDoc->n_OpenImg_Height, pDoc->n_OpenImg_Width);
//화면에 호환되는 비트맵 생성
pOldBmp= (CBitmap*)MemDC.SelectObject(&bmp); //메모리DC에서 bmp 선택
for(int y=0; y<pDoc->n_OpenImg_Height; y++)
{
for(int x=0; x<pDoc->n_OpenImg_Width; x++)
{
MemDC.SetPixel(x,y,
RGB(*(pDoc->m_pDib->m_OpenImg),
*(pDoc->m_pDib->m_OpenImg),
*(pDoc->m_pDib->m_OpenImg))); //MemDC에 픽셀들에 RGB값을 찍는다.
pDoc->m_pDib->m_OpenImg++;
}
}
//화면에 그린다: BufferADC 안에 내용들을 화면에 표현
pDC->BitBlt(0, 0, pDoc->n_OpenImg_Height, pDoc->n_OpenImg_Width,
&MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBmp);
ReleaseDC(&MemDC);
}
{
if(Cam_Start){
CDC MemDC;
{
MemDC.CreateCompatibleDC(&dc); //화면 pDC와 호환되는 메모리DC 생성
CBitmap* pOldBmp= NULL;
bmp.CreateCompatibleBitmap(&dc,Widths,Heights);
//화면에 호환되는 비트맵 생성
pOldBmp= (CBitmap*)MemDC.SelectObject(&bmp); //메모리DC에서 bmp 선택
for(int y=Heights-1; y>=0; y--)
{
y2++;
for(int x=0; x<=Widths-1; x++)
{
MemDC.SetPixel(x,y,RGB(Map2[y2][x].r, Map2[y2][x].g, Map2[y2][x].b)); //MemDC에 픽셀들에 RGB값을 찍는다.
}
//화면에 그린다
dc.BitBlt(200, 20, Widths, Heights,&MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBmp);
ReleaseDC(&MemDC);
}
}
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC DC(this);
draw_cam();
CDialog::OnPaint();
}
}
// 해줘도 실행하는데에는 아직 이상이 없었다..
아마. main에서 계속해서 draw_cam();를 실행하기 떄문에 좀 커버가 되지 않나 싶다.
문제점 : showwindow라는 OpenCV함수를 쓰지 않으면
메인대화상자가 죽어버리고...음..그래도 영상은 계속 뗘있다..ㅡㅡ
* 그리고 리스트박스에다 에러점을 출력하게 하였다..
.