学习OpenCV 第四章课后题第一题(合并图像、缩放、字体)

第一题:

a:(1)从视频读入数据;(2):将输入数据转成灰度图像 (3):对图像做Canny边缘检测

int main(int argc, const char * argv[]) {
        /*1.从视频文件读如数据*/
        const char filename[] = "/Users/linwang/LinMovie/Wolf.mp4";
        CvCapture * capture = cvCreateFileCapture(filename);
        IplImage * frame ;
        
        while(1)
        {
            frame = cvQueryFrame(capture);
            IplImage * Gray_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
            IplImage * Cany_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
            /*注意RGB转GRAY要单通道的才可以*/
            cvCvtColor(frame, Gray_Img, CV_RGB2GRAY);
            cvCanny(frame, Cany_Img, 10, 100);
            cvNamedWindow("Original",0);
            cvNamedWindow("Canny_Img",0);
            cvNamedWindow("Gray_Img",0);
            if(!frame)
            {
                break;
            }
            cvShowImage("Original", frame);
            cvShowImage("Gray_Img", Gray_Img);
            cvShowImage("Canny_Img", Cany_Img);
            char c = cvWaitKey(33);
            if(c == 27)
            {
                break;
            }
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("Original");
        cvDestroyWindow("Canny_Img");
        cvDestroyWindow("Gray_Img");
        return 0;
    }
三张图像同时显示

b:把三个图像合并到一个上去:

int main(int argc, const char * argv[]) {
        /*1.从视频文件读如数据*/
        const char filename[] = "/Users/linwang/LinMovie/Wolf.mp4";
        CvCapture * capture = cvCreateFileCapture(filename);
        IplImage * frame ;
        
        CvFont font;
        cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1, 1, 0, 2, 8);
        
        
        while(1)
        {
            frame = cvQueryFrame(capture);
            IplImage * Gray_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
            IplImage * Cany_Img = cvCreateImage(cvSize(frame->width, frame->height), frame->depth, 1);
            
            IplImage * NewBee = cvCreateImage(cvSize(frame->width * 3, frame->height), frame->depth, 3);
            /*2、注意RGB转GRAY要单通道的才可以*/
            cvCvtColor(frame, Gray_Img, CV_RGB2GRAY);
            cvCanny(frame, Cany_Img, 10, 100);
            cvZero(NewBee);
            
            /*3、载入原图像加载到目标图像*/
            cvSetImageROI(NewBee, cvRect(0, 0, frame->width, frame->height));
            cvCopy(frame, NewBee);
            cvResetImageROI(NewBee);
   
            /*4、把灰度图像加载到目标图像*/
            cvSetImageROI(NewBee, cvRect(frame->width,0,frame->width, frame->height));
            NewBee->nChannels = 1;
            cvCopy(Gray_Img, NewBee);
            cvResetImageROI(NewBee);
            
            /*5、把Canny化的图像加载到目标图像*/
            cvSetImageROI(NewBee, cvRect(frame->width * 2, 0, frame->width, frame->height));
            NewBee->nChannels = 1;
            cvCopy(Cany_Img, NewBee);
            cvResetImageROI(NewBee);
            
            if(!frame)
            {
                break;
            }
            
            /*6、缩放*/
            double scale = 0.5;     //缩放的倍数
            CvSize size;
            size.width = NewBee->width*scale *scale;
            size.height = NewBee->height*scale;
            IplImage * dst = cvCreateImage(size, NewBee->depth, NewBee->nChannels);
            cvResize(NewBee, dst, CV_INTER_CUBIC);
            
            /*7、设置字体*/
            cvPutText(dst, "Original!", cvPoint(100, 50), &font, CV_RGB(255,255,255));
            cvPutText(dst, "Gray!", cvPoint(450, 50), &font, CV_RGB(255,255,255));
            cvPutText(dst, "Canny!", cvPoint(700, 50), &font, CV_RGB(255,255,255));
            cvNamedWindow("NewBee",0);
            cvShowImage("NewBee", dst);
            char c = cvWaitKey(33);
            if(c == 27)
            {
                break;
            }
        }
        cvReleaseCapture(&capture);
        cvDestroyWindow("NewBee");
        return 0;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值