日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《学习Opencv》第五章 习题6

發(fā)布時間:2024/1/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《学习Opencv》第五章 习题6 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是第五章 習(xí)題5、6的結(jié)合版,其中實(shí)現(xiàn)了攝像頭抓拍功能,能夠成功運(yùn)行。

#include "stdafx.h" #include "cv.h" #include "highgui.h"void* getImage() {CvCapture* capture=cvCreateCameraCapture(0);IplImage *img1=NULL,*img2=NULL,*img3=NULL,*frame=NULL,*ppImage=NULL;char keycode;cvNamedWindow("frame");if(capture!=NULL){frame=cvQueryFrame(capture); //注意任何視頻(包括攝像頭獲取的視頻的第一幀都是空幀,要從下一幀開始才是圖像)while(1){frame=cvQueryFrame(capture);cvShowImage("frame",frame);keycode=cvWaitKey(30);if(keycode==27)break;//保存第一張想要保存的圖像if(keycode=='1'){img1=cvCreateImage(cvGetSize(frame),frame->depth,1); //將通道數(shù)為1對應(yīng)灰度圖像,再將frame利用cvConvertImage轉(zhuǎn)換成灰度圖像cvConvertImage(frame,img1); //也可以利用cvCvtColor(frmae,img1,CV_BGR2GRAY)轉(zhuǎn)成灰度圖像cvSaveImage("C:/Users/shark/Desktop/1.jpg",img1); }//保存第二張想要的圖像:相對于第一張圖像多出一個水杯之類的東西if(keycode=='2'){img2=cvCreateImage(cvGetSize(frame),frame->depth,1);cvConvertImage(frame,img2);cvSaveImage("C:/Users/shark/Desktop/2.jpg",img2);}}}img3=cvCreateImage(cvGetSize(frame),frame->depth,1);ppImage=cvCreateImage(cvGetSize(frame),frame->depth,1);//差的絕對值、二值化閾值、開操作cvAbsDiff(img1,img2,img3);cvThreshold(img3,img1,20,255,CV_THRESH_BINARY);cvMorphologyEx(img1,img3,NULL,NULL,CV_MOP_OPEN);cvCopy(img3,ppImage);cvSaveImage("C:/Users/shark/Desktop/3.jpg",ppImage);cvReleaseImage(&img1);cvReleaseImage(&img2);cvReleaseImage(&img3);cvReleaseCapture(&capture);cvDestroyAllWindows();return ppImage; }bool findImage(IplImage* pImage,char nVal, CvPoint* pPos) {char* ptr=NULL;if(pImage->nChannels==1){ptr=pImage->imageData;if(ptr!=NULL){for(int row=0;row<pImage->height;row++){for(int col=0;col<pImage->width;col++){if(ptr[col]==nVal) //此處圖像顏色類型為uchar{pPos->x=col;pPos->y=row;return true;}if(ptr[col]>150) //???{int x=0;}}ptr+=pImage->widthStep;}}}return false; }int main() {IplImage* pImg=NULL;CvPoint oldPoint={0,0},curPoint={0,0};int nArea=0,newArea=0;CvConnectedComp comp;char* szMyWin="my win";pImg=(IplImage*)getImage();if(pImg!=NULL){do{if(findImage(pImg,255,&curPoint)) //找像素值為255的像素點(diǎn){cvFloodFill(pImg,curPoint,cvScalar(100),cvScalar(0),cvScalar(0),&comp,8|CV_FLOODFILL_FIXED_RANGE);if(comp.area<nArea){if(comp.area>0)cvFloodFill(pImg,curPoint,cvScalar(0),cvScalar(0),cvScalar(0),&comp,8|CV_FLOODFILL_FIXED_RANGE); }else{newArea=comp.area;if(nArea>0) //此為對之前區(qū)域填充cvFloodFill(pImg,oldPoint,cvScalar(0),cvScalar(0),cvScalar(0),&comp,8|CV_FLOODFILL_FIXED_RANGE);memcpy(&oldPoint,&curPoint,sizeof(CvPoint));//oldPoint=curPoint;nArea=newArea;}}else{cvFloodFill(pImg,oldPoint,cvScalar(255),cvScalar(0),cvScalar(0),&comp,8|CV_FLOODFILL_FIXED_RANGE); //填充最后的最大區(qū)域break;}}while(true);cvSaveImage("C:/Users/shark/Desktop/4.jpg",pImg);cvNamedWindow(szMyWin);cvShowImage(szMyWin,pImg);cvWaitKey(0);cvReleaseImage(&pImg);cvDestroyWindow(szMyWin);} }

  

轉(zhuǎn)載于:https://www.cnblogs.com/luckyboylch/p/4905706.html

總結(jié)

以上是生活随笔為你收集整理的《学习Opencv》第五章 习题6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。