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"); }
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 ) ); } } }