这是第五章 习题5、6的结合版,其中实现了摄像头抓拍功能,能够成功运行。

#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);    //将通道数为1对应灰度图像,再将frame利用cvConvertImage转换成灰度图像cvConvertImage(frame,img1);                              //也可以利用cvCvtColor(frmae,img1,CV_BGR2GRAY)转成灰度图像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的像素点{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)   //此为对之前区域填充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);   //填充最后的最大区域break;}}while(true);cvSaveImage("C:/Users/shark/Desktop/4.jpg",pImg);cvNamedWindow(szMyWin);cvShowImage(szMyWin,pImg);cvWaitKey(0);cvReleaseImage(&pImg);cvDestroyWindow(szMyWin);}
}

  

转载于:https://www.cnblogs.com/luckyboylch/p/4905706.html

《学习Opencv》第五章 习题6相关推荐

  1. 数值分析李庆杨第五章习题

    数值分析李庆杨第五章习题 第十八题 计算实习题第三题 分析结果 计算实习题第四题 第一问 第二问 收获 第十八题 学习条件数 逆矩阵 矩阵转置 特征向量.特征值的求法 X = [100,99;99,9 ...

  2. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  3. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  4. 《SysML精粹》学习记录--第五章

    <SysML精粹>学习记录 第五章:用例图(Use Case Diagram) 用例图简介 用例图外框 小结 第五章:用例图(Use Case Diagram) 用例图简介   用例图可以 ...

  5. 工程伦理第五章习题答案

    工程伦理 第五章习题 工程伦理 1 选择题 2 讨论题 1 选择题 1-5 BDCBB 6 ABC 7 ACD 8 AB 9 BCD 10 ABCD 11 × × √ √ √ 2 讨论题 1.结合自己 ...

  6. java第5版的课后答案_java第五章习题及答案.doc

    java第五章习题及答案 第五章习题 填空题: 1.小应用程序是存储于----上的java程序,它是在--端运行的. 2.小应用程序的生命期中包括如下几个阶段:--.--.--.--. 3.程序包ja ...

  7. java程序设计基础_陈国君版第五版_第五章习题

    java程序设计基础_陈国君版第五版_第五章习题 import java.util.Scanner; public class Main5_1 {public static void main(Str ...

  8. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

  9. 计算机网络(谢希仁-第八版)第五章习题全解

    5-01 试说明运输层在协议栈中的地位和作用.运输层的通信和网络层的通信有什么重要的区别?为什么运输层是必不可少的? 地位和作用: 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于 ...

最新文章

  1. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行expoTrans指数变换(Exponential transformation、可以处理负数)
  2. 恒生电子linux笔试题,恒生电子一面
  3. php 文件夹里有多少,计算目录php中有多少个文件
  4. 火狐翻译插件_阅读外文必备,浏览器实用的翻译插件推荐
  5. Java面典_Java集合04——fail-fastfail-safe 详解
  6. syslog工具_INAV:一款专用的日志审查导航工具
  7. 经纬度(度分秒)坐标转换为小数格式(weixin公众号【图说GIS】)
  8. 整理一波常用中文文字集合(去重的文字最多中文:20902个文字+ 常用的中文文字3900+)
  9. 微信小程序Scope参数错误或没有Scope权限的处理方法
  10. [ZT]调侃、反讥与诡辩
  11. Django 解决CSRF 跨域问题总结
  12. hp扫描无法选择发送到计算机,HP Officejet Pro 8600打印机无法使用扫描到计算机的功能...
  13. 高斯投影坐标计算例题_测量学高斯投影已知横坐标如何求在第几度带投影计算而得的?例如:...-y坐标的自然值怎么算-数学-莫囤料同学...
  14. js立即执行函数,jqueryReady和Onload执行顺序比较
  15. maven 中央仓库网址
  16. vite打包快几款基于vue3和vite的开箱即用的中后台管理模版
  17. 工业数字化转型 — 工业 4.0
  18. 温度压力测试软件什么好,鲁大师温度压力测试多少度正常?鲁大师压力测试靠谱吗?...
  19. 【年底超顺SCI】4区计算机科学类SCI,仅剩10篇版面
  20. pycharm安装包失败

热门文章

  1. liferay form 小案例
  2. Response笔记
  3. Lucene分类统计示例
  4. cmake的使用 cmake不是内部或外部命令
  5. 玩转Linux必备知识(三)
  6. tf.app.flags 定义命令行可选参数
  7. pandas使用get_dummies进行one-hot编码
  8. java深度学习(一)Maven创建一个新的ND4J工程
  9. java EE中JPA介绍
  10. Spring注解中@Configuration和@Configurable的区别