'Capstone_졸작/작업페이지'에 해당되는 글 11건

  1. 2008.06.12 영상에서 네모 찾기
  2. 2008.06.12 IplImage를 윈도우에서 띄우기 (MFC, Windows API)
  3. 2008.06.12 문자열 처리 (CString)
  4. 2008.06.12 영상에서 마커 인식하기
  5. 2008.06.12 Linux 타이머 사용하기 (1)
  6. 2008.06.12 임베디드 opencv 처리 에러
  7. 2008.06.12 라인소스분석
  8. 2008.06.12 라인트레이싱
  9. 2008.06.12 Line Trace
  10. 2008.06.12 라인센싱방법
  11. 2008.06.12 Servo_Motor

2008년 6월 9일 월요일

오후 6:58

원래 OpenCV에서 처리한 데이타는 Intel Image processing Library (IPL) 맞춰서 나옵니다. 그런데 이걸 일반적으로 윈도우에서 띄워 봐야 겠지요? OpenCV Yahoo group 보니까 이렇게 나와 있네요.

void  FillBitmapInfo1( BITMAPINFO* bmi, int width, int height, int bpp ) 
{
    BITMAPINFOHEADER* bmih = &(bmi->bmiHeader); 
    memset( bmih, 0, sizeof(*bmih)); 
    bmih->biSize   = sizeof(BITMAPINFOHEADER); 
    bmih->biWidth  = width; 
    bmih->biHeight = -abs(height); 
    bmih->biPlanes = 1; 
    bmih->biBitCount = bpp; 
    bmih->biCompression = BI_RGB; 
    if( bpp == 8 ) 
    { 
        RGBQUAD* palette = bmi->bmiColors; 
        int i; 
        for( i = 0; i < 256; i++ ) 
        { 
            palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i; 
            palette[i].rgbReserved = 0; 
        } 
    } 
} 
   
   
void ShowImage1( IplImage * src, HDC dc, int x, int y, int w, int h, 
                 int from_x, int from_y ) 
{ 
    if( src->width > 0 ) 
    { 
        uchar buffer[sizeof(BITMAPINFOHEADER) + 1024]; 
        BITMAPINFO* bmi = (BITMAPINFO*)buffer; 
        int bmp_w = src->width; 
        int bmp_h = src->height; 
   
        FillBitmapInfo1( bmi, bmp_w, bmp_h, src->nChannels*8 ); 
   
        int sw = MAX( MIN( bmp_w - from_x, w ), 0 ); 
        int sh = MAX( MIN( bmp_h - from_y, h ), 0 ); 
   
        int res = SetDIBitsToDevice( 
              dc,                        // handle to DC 
              x,                         // x-coord of destination upper-left corner 
              y,                         // y-coord of destination upper-left corner 
              sw,                        // source rectangle width 
              sh,                        // source rectangle height 
              from_x,                    // x-coord of source lower-left corner 
              from_y,                    // y-coord of source lower-left corner 
              from_y,                    // first scan line in array 
              sh,                        // number of scan lines 
              src->imageData + from_y*src->widthStep // array of DIB bits 
              (BITMAPINFO*)bmi,          // bitmap information 
              DIB_RGB_COLORS );          // RGB or palette indexes 
    } 
} 


     

이렇게 쓰면 되겠지요?

     
HDC  myDC= GetDC(0);  // THIS IS YOUR DESKTOP-WINDOW
                      //ADJUST IT TO YOUR WINDOW

ShowImage1(your_img ,myDC,0,0,100,100,0,0);
                      //ADJUST TO YOUR NEEDS


GetDC()
자기가 원하는 윈도우의 Handle DeviceContext 돌려주는 것이니 원하는 윈도우의 Handle
인자로 넣어 주시면 됩니다. 윈도우 API설명이 궁금하시면 Petzold Programming Windows 참고하세요.
번역본 역시 있습니다.

Programming Windows, 5/E : The Definitive Guide to the Win32 API - Petzold, Charles

실제 사용 법

HDC myDC= ::GetDC(m_hWnd);  // THIS IS YOUR DESKTOP-WINDOW
                            //ADJUST IT TO YOUR WINDOW
    
ShowImage1(ShowOrg ,myDC,10,10,320,240,0,0);        //ADJUST TO YOUR NEEDS
ShowImage1(ShowMark ,myDC,350,10,160,160,0,0);        //ADJUST TO YOUR NEEDS

::ReleaseDC(m_hWnd,myDC);

신고
Posted by Frys

2008년 6월 11일 수요일

오전 2:10

CString::GetAt // 인덱스 넘버에 의해 하나의 문자를 반환한다

CString s("abcdef");

ASSERT(s.GetAt(2) =='');

   

CString::SetAt // 인덱스 넘버에 의해 지정받은 한문자를 덮어쓴다

   

CString::Compare // CString 객체와 다른 문자열을 Windows CE IstrCmp 함수를 사용해서 비교한다

CString s1("abc");

CString s2("abd");

ASSERT(s1.Compare(s2) == -1);

   

CString::CompareNocase // CString 객체와 다른 문자열을 Windows CE lstrcmpi 함수를 사용해서 비교한다.  ^^ 대문자 소문자 상관없이 비교

CString s1("abc");

CString s2("ABC");

ASSERT(s1.CompareNoCase(s2) == -1);

   

CString::Mid // 메소드는 CString 객체의 0 위치부터 nCount 부분 문자열을 추출한다

CString s("abcdef");

ASSERT (s.MId(2,3) == _T("cde"));

   

CString::Left // 왼쪽부터 nCount 믄자열을 추출

CString s("abcdef");

ASSERT(s.Left(2) ==("ab"));

   

CString::Right // 오른족부터 nCount문자열을 추출

CString s("abcdef");

ASSERT(s.Right(2) ==("ef"));

   

신고
Posted by Frys



   

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

IplImage를 윈도우에서 띄우기 (MFC, Windows API)  (0) 2008.06.12
문자열 처리 (CString)  (0) 2008.06.12
영상에서 마커 인식하기  (0) 2008.06.12
Linux 타이머 사용하기  (1) 2008.06.12
임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
Posted by Frys

2008년 6월 3일 화요일

오전 12:20

목록열기

전체목록 (2200)

리눅스에서의 타이머 - Signal로 이용하기

EmbeddedLinux 강좌

2006/11/29 11:05

http://blog.naver.com/kingseft/140031659639

물론 디바이스 드라이버를 이용해서 CPU의 내장 타이머들을 이용해서 직접적으로 제어를 해도 되지만... 대략 1초 이상의 초단위 타이머를 사용하고자 한다면 심플하게 signal 함수를 이용해서 초단위의 타이머를 구현할 수 있다.

   

signal 중에서 SIGALRM 이 있는데 이 signal은 alarm 함수가 보내는 signal 이다. 이 alarm을 주기적으로 발생하고 signal을 처리 하면 리눅스에서도 타이머를 사용할 수 있다.

   

   

#include <stdio.h>

#include <signal.h>

#include <unistd.h>

   

#define INTERVAL        1

   

void mytimer(int signo)

{

        printf("mytimer called........\n");

        alarm(INTERVAL);       //  이렇게 해주면 알람처리후에 다시 알람이 등록되어 이후에도

                                        // 계속 구동되게 된다.

}

   

main()

{

        struct sigaction act;

   

        act.sa_handler = mytimer;

        sigemptyset(&act.sa_mask);

        act.sa_flags = 0;

   

        sigaction(SIGALRM, &act, 0);

   

        alarm(INTERVAL);

   

        while(1)

        {

                sleep(100);         

        }

}

   

   

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

문자열 처리 (CString)  (0) 2008.06.12
영상에서 마커 인식하기  (0) 2008.06.12
Linux 타이머 사용하기  (1) 2008.06.12
임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Posted by Frys

2008년 5월 23일 금요일

오전 10:09

에러 1 : 어떤 연산을 반복 하였을 때 메모리 부족 에러.(메모리 반환이 제대로 이루어 지지 않았음)

oom-killer: gfp_mask=0xd2

DMA per-cpu:

cpu 0 hot: low 14, high 42, batch 7

cpu 0 cold: low 0, high 14, batch 7

Normal per-cpu: empty

HighMem per-cpu: empty

   

Free pages: 1340kB (0kB HighMem)

Active:10941 inactive:3242 dirty:0 writeback:0 unstable:0 free:335 slab:477 mapped:10087 pagetables:46

DMA free:1340kB min:1024kB low:1280kB high:1536kB active:43764kB inactive:12968kB present:65536kB pages_scanned:7199 all_unreclaimable? no

lowmem_reserve[]: 0 0 0

Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0

HighMem free:0kB min:128kB low:160kB high:192kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0

DMA: 37*4kB 19*8kB 3*16kB 1*32kB 1*64kB 1*128kB 1*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 1340kB

Normal: empty

HighMem: empty

Swap cache: add 0, delete 0, find 0/0, race 0+0

Free swap = 0kB

Total swap = 0kB

Out of Memory: Killed process 980 (video-capture).

Trying to free nonexistent resource <00000000-000fffff>

Killed

[root@KROBO nfs]$

   

   

파일 정보가 제대로 입력되었는지 확인…

fbvar.xres = 640, yres =480, bpp = 16

nSize =112, ID=0, nChannels = 3, alphaChannel = 0, depth = 8, channelSeq[0]=66, channelSeq[1]=71, channelSeq[2]=82, channelSeq[3]=0,

dataOrder =0, origin = 0, align = 4, width = 160, height=120, imageSize = 57600, widthStep = 480

   

typedef struct _IplImage

{

int nSize; /* sizeof(IplImage) */

int ID; /* version (=0)*/

int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */

int alphaChannel; /* ignored by OpenCV */

int depth; /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,

IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */

char colorModel[4]; /* ignored by OpenCV */

char channelSeq[4]; /* ditto */

int dataOrder; /* 0 - interleaved color channels, 1 - separate color channels.

cvCreateImage can only create interleaved images */

int origin; /* 0 - top-left origin,

1 - bottom-left origin (Windows bitmaps style) */

int align; /* Alignment of image rows (4 or 8).

OpenCV ignores it and uses widthStep instead */

int width; /* image width in pixels */

int height; /* image height in pixels */

struct _IplROI *roi;/* image ROI. if NULL, the whole image is selected */

struct _IplImage *maskROI; /* must be NULL */

void *imageId; /* ditto */

struct _IplTileInfo *tileInfo; /* ditto */

int imageSize; /* image data size in bytes

(==image->height*image->widthStep

in case of interleaved data)*/

char *imageData; /* pointer to aligned image data */

int widthStep; /* size of aligned image row in bytes */

int BorderMode[4]; /* ignored by OpenCV */

int BorderConst[4]; /* ditto */

char *imageDataOrigin; /* pointer to very origin of image data

(not necessarily aligned) -

needed for correct deallocation */

}

IplImage;

   

소스

   

printf("nSize =%d, ID=%d, nChannels = %d, alphaChannel = %d, depth = %d, channelSeq[0]=%d, channelSeq[1]=%d, channelSeq[2]=%d, channelSeq[3]=%d, dataOrder =%d, origin = %d, align = %d, width = %d, height=%d, imageSize = %d, widthStep = %d\n", \

src_image->nSize,src_image->ID,src_image->nChannels,src_image->alphaChannel,src_image->depth,src_image->channelSeq[0],src_image->channelSeq[1],src_image->channelSeq[2],src_image->channelSeq[3],\

src_image->dataOrder,src_image->origin,src_image->align,src_image->width,src_image->height,src_image->imageSize,src_image->widthStep);

   

파일 정보 자체는 제대로 입력되어 있음.

   

   

윈도우 어플리케이션에서 실행

무리없이 잘 작동함. 똑같은 코드로 배열을 IplImage로 대입.

   

사용자 삽입 이미지

Threshold

결과값이 나오지 않음

   

EqualizeHist

화면이 지글거리며 노이즈 처럼 나옴.

   

   

윈도우 버전으로 했을때는 다 잘됨.

구현해놓은 RGB배열 to IPL도 문제없이 작동됨.

   

구글 검색을 통해 알게 된 정보에 의해 ./configure옵션에 -enable--static옵션을 추가함으로 정적 라이브러리를 사용하게 하였음. 그래도 안됨.

   

플롯팅 연산 처리 과정에서 문제가 발생함.

   

따라서.. 간단한 mat, cvCvtColor등을 제외하고는 함수가 제대로 작동하지 않음.

   

   

   

윈도 어플로 사각형 판별 완료

원 영상

cvCanny알고리즘 적용

Hough - trans알고리즘 적용

   

Square Sample 프로그램 적용

   

   

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

영상에서 마커 인식하기  (0) 2008.06.12
Linux 타이머 사용하기  (1) 2008.06.12
임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Line Trace  (0) 2008.06.12
Posted by Frys

   

  

   

  

2008년 4월 29일 화요일

오전 3:19

  

  

 

<file://D:\STUDY\Project\LineTracer>

  

  

  

     

  

   

(33294+27184 )/2=30239

  

 

  

   

  

    

  

 

현재 샘플링 하는 함수에 들어갔을때 데이터 갱신이 안됨.

  

    

   

   

  

   

  

  

  

 

VCC 가 연결이 안됐다!!!

푸른게 수광

없는게 발광

   

  

  

  
신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

Linux 타이머 사용하기  (1) 2008.06.12
임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Line Trace  (0) 2008.06.12
라인센싱방법  (0) 2008.06.12
Posted by Frys

 

   

 

 

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Line Trace  (0) 2008.06.12
라인센싱방법  (0) 2008.06.12
Servo_Motor  (0) 2008.06.12
Posted by Frys

2008년 2월 9일 토요일

오후 9:16

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Line Trace  (0) 2008.06.12
라인센싱방법  (0) 2008.06.12
Servo_Motor  (0) 2008.06.12
Posted by Frys

   

   

   

주기를 10~20ms로 만들자 그리고 나서 생각하자.

   

   

   

   

신고

'Capstone_졸작 > 작업페이지' 카테고리의 다른 글

임베디드 opencv 처리 에러  (0) 2008.06.12
라인소스분석  (0) 2008.06.12
라인트레이싱  (0) 2008.06.12
Line Trace  (0) 2008.06.12
라인센싱방법  (0) 2008.06.12
Servo_Motor  (0) 2008.06.12
Posted by Frys

티스토리 툴바