コード例 #1
0
ファイル: cv239.cpp プロジェクト: unix8net/jpegReadOfOpencv
int main()
{
	clock_t start, end;
	start = clock();
	JpegDecoder jpegDector;
	jpegDector.setSource("21.jpg");
	jpegDector.readHeader();
	int height = jpegDector.height();
	int width = jpegDector.width();
	cout<<"高为:"<<height<<"   宽为:"<<width<<endl;
	cout<<"通道数:"<<CV_MAT_CN(jpegDector.type())<<endl;
	cout<<"sign:"<<jpegDector.signature()<<endl;
	
	CvMat *mat = cvCreateMat(jpegDector.height(), jpegDector.width(),(jpegDector.type()));
	jpegDector.readData(*mat);
	end = clock();
	printf("Run time:%f ",(double)(end - start) );
#if 0
	unsigned char * data;
	for(int i=0;i<10;i++)
	{
		data = (uchar*)(mat->data.ptr + i*mat->step);
		for(int j=0;j<10;j++)
		{
			printf("%d ",data[j*3]);
			printf("%d ",data[j*3+1]);
			printf("%d   ",data[j*3+2]);
		}
		printf("\n");
	}
#endif
	printf("------cvMat-------\n\n");
	cvReleaseMat(&mat);
	//CvMat * imgSrc = cvLoadImageM("1.jpg");
#if 0
	IplImage *imgSrc = cvLoadImage("21.jpg");
	IplImage *imgRes = cvCreateImage(cvGetSize(imgSrc),8,3);
	
	cout<<imgSrc->nChannels<<"  "<<imgSrc->depth<<endl;
	//IplImage *imgRes = cvCreateImageHeader(cvGetSize(imgSrc),8,3);
	//cvNamedWindow("test source", CV_WINDOW_AUTOSIZE);
	cvShowImage("source", imgSrc);
	end = clock();
	//cvNamedWindow("test result", CV_WINDOW_AUTOSIZE);
	cvShowImage("result", imgRes);
#endif	
	//printf("Run time:%f ",(double)(end - start) );
	//cvWaitKey(0);
	system("pause");
}
コード例 #2
0
ファイル: processthread.cpp プロジェクト: SorcererX/SepiaCore
void ProcessThread::own_thread()
{
    enum class Format { UNKNOWN, RAW8, RAW16, MJPEG, YUYV, BGR8 };

    Format format = Format::UNKNOWN;
    int cv_format = CV_MAKETYPE( CV_8U, 1 );

    sepia::Stream::image_header_t* hdr = m_input->getHeader( m_id );
    switch( hdr->fourcc )
    {
    case 0x00000000:
        if( hdr->bpp == 8 )
        {
            format = Format::RAW8;
            cv_format = CV_MAKETYPE( CV_8U, 1 );
        }
        else if( hdr->bpp == 16 )
        {
            format = Format::RAW16;
            cv_format = CV_MAKETYPE( CV_16U, 1 );
        }
        else if( hdr->bpp == 24 )
        {
            format = Format::BGR8;
            cv_format = CV_MAKETYPE( CV_8U, 3 );
        }
        break;
    case FOURCC( 'M', 'J', 'P', 'G'):
        format = Format::MJPEG;
        cv_format = CV_MAKETYPE( CV_8U, 3 ); // format after conversion
        break;
    default:
        break;
    }

    cv::Mat input_frame( m_input->getHeader( m_id )->height, m_input->getHeader( m_id )->width, cv_format, m_input->getAddress( m_id ) );

    cv::Mat converted_frame( m_output->getHeader( m_id )->height, m_output->getHeader( m_id )->width, CV_8UC3 );

    if( m_rectifier == NULL )
    {
        converted_frame.data = reinterpret_cast< unsigned char* >( m_output->getAddress( m_id ) );
    }

    cv::Mat rectified_frame( m_output->getHeader( m_id )->height, m_output->getHeader( m_id )->width, CV_8UC3, m_output->getAddress( m_id ) );

    JpegDecoder decoder;

    while( !m_terminate )
    {
        if( format == Format::RAW8 || format == Format::RAW16 )
        {
            cv::demosaicing( input_frame, converted_frame, cv::COLOR_BayerBG2BGR_EA );
        }
        else if( format == Format::MJPEG )
        {
            // perform JPEG decode here
            decoder.readHeader( reinterpret_cast< unsigned char* >( input_frame.data ), m_input->getHeader( m_id )->size );
            decoder.readData( reinterpret_cast< unsigned char* >( converted_frame.data ), m_input->getHeader( m_id )->width * 3, true );
        }
        else {

        }

        if( m_rectifier != NULL )
        {
            if( m_id == 0 )
            {
                m_rectifier->remapLeft( &converted_frame, &rectified_frame );
            }
            else if( m_id == 1 )
            {
                m_rectifier->remapRight( &converted_frame, &rectified_frame );
            }
        }

        m_barrier->wait();
        if( m_id == 0 )
        {
            m_output->update();
            m_input->update();
        }
        m_barrier->wait();
        input_frame.data = reinterpret_cast< unsigned char* >( m_input->getAddress( m_id ) );

        if( m_rectifier != NULL )
        {
            rectified_frame.data = reinterpret_cast< unsigned char* >( m_output->getAddress( m_id ) );
        }
        else
        {
            converted_frame.data = reinterpret_cast< unsigned char* >( m_output->getAddress( m_id ) );
        }
    }
}