




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于OpenCV实现的物体定位系统OpenCV是一个很强大的机器视觉库,利用它我们可以开发出丰富多彩的使用项目。近日,我在研究一个图中物体定位系统。本程序用的是OpenCV2.4.9,附带OpenCV3.0。程序中的原图为我随手拍的一张图片图中有三个物体,都是蓝色的,我首先取原图的蓝色通道变为灰度图灰度图经过中值滤波后可以得到去噪后的图片根据原图的蓝色通道和红色通道的大概取值范围,我们可得到比较满意的二值图为了去掉物体中少量的黑色部分,我用闭运算然而,图中最上面的那个物体里面还有一块很大的黑色(目前我也不知道怎么去掉,如果有大神知道望告知)接下来就是找出物体的轮廓最后找到能包围轮廓的最小矩形好了,占时就这么多了下面是配套的程序OpenCV2.4.9半根cppview plaincopy1. #include2. #include3. #defineBIN_DIV1104. 5. usingnamespacestd;6. usingnamespacecv;7. 8. intmain()9. 10. MatsrcImg,midImg,dstImg;11. srcImg=imread(hehe.jpg);12. Matxianshi=srcImg.clone();13. MatredChannel;14. namedWindow(【原图】,WINDOW_NORMAL);15. imshow(【原图】,srcImg);16. MatgrayImg;17. vectorchannels;18. split(srcImg,channels);19. /cvtColor(srcImg,grayImg,COLOR_BGR2GRAY);20. grayImg=channels.at(0);21. redChannel=channels.at(2);22. namedWindow(【灰度图】,WINDOW_NORMAL);23. imshow(【灰度图】,grayImg);24. /均值滤波25. blur(grayImg,grayImg,Size(20,20),Point(-1,-1);26. namedWindow(【均值滤波后】,WINDOW_NORMAL);27. imshow(【均值滤波后】,grayImg);28. /转化为二值图29. MatmidImg1=grayImg.clone();30. introwNumber=midImg1.rows;31. intcolNumber=midImg1.cols;32. 33. for(inti=0;irowNumber;i+)34. 35. uchar*data=midImg1.ptr(i);/取第i行的首地址36. uchar*redData=redChannel.ptr(i);37. for(intj=0;jBIN_DIV&redDatajBIN_DIV*2/3)40. dataj=255;41. else42. dataj=0;43. 44. 45. namedWindow(【二值图】,WINDOW_NORMAL);46. imshow(【二值图】,midImg1);47. MatmidImg2=midImg1.clone();48. Matelement=getStructuringElement(MORPH_RECT,Size(40,40);49. morphologyEx(midImg1,midImg2,MORPH_CLOSE,element);50. namedWindow(【闭运算后】,WINDOW_NORMAL);51. imshow(【闭运算后】,midImg2);52. coutmidImg1.channel=midImg1.channels()endl;53. coutmdiImg1.depthmidImg1.depth()endl;54. /查找图像轮廓55. MatmidImg3=Mat:zeros(midImg2.rows,midImg2.cols,CV_8UC3);56. vectorvectorcontours;57. vectorhierarchy;58. findContours(midImg2,contours,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE);59. intindex=0;60. for(;index=0;index=hierarchyindex0)61. 62. Scalarcolor(255,255,255);63. drawContours(midImg3,contours,index,color,NULL,8,hierarchy);64. 65. namedWindow(【轮廓图】,WINDOW_NORMAL);66. imshow(【轮廓图】,midImg3);67. MatmidImg4=midImg3.clone();68. /创建包围轮廓的矩形边界69. for(inti=0;icontours.size();i+)70. 71. /每个轮廓72. vectorpoints=contoursi;73. /对给定的2D点集,寻找最小面积的包围矩形74. RotatedRectbox=minAreaRect(Mat(points);75. Point2fvertex4;76. box.points(vertex);77. /绘制出最小面积的包围矩形78. line(xianshi,vertex0,vertex1,Scalar(100,200,211),6,CV_AA);79. line(xianshi,vertex1,vertex2,Scalar(100,200,211),6,CV_AA);80. line(xianshi,vertex2,vertex3,Scalar(100,200,211),6,CV_AA);81. line(xianshi,vertex3,vertex0,Scalar(100,200,211),6,CV_AA);82. /绘制中心的光标83. Points1,l,r,u,d;84. s1.x=(vertex0.x+vertex2.x)/2.0;85. s1.y=(vertex0.y+vertex2.y)/2.0;86. l.x=s1.x-10;87. l.y=s1.y;88. 89. r.x=s1.x+10;90. r.y=s1.y;91. 92. u.x=s1.x;93. u.y=s1.y-10;94. 95. d.x=s1.x;96. d.y=s1.y+10;97. line(xianshi,l,r,Scalar(100,200,211),2,CV_AA);98. line(xianshi,u,d,Scalar(100,200,211),2,CV_AA);99. 100. namedWindow(【绘制的最小面积矩形】,WINDOW_NORMAL);101. imshow(【绘制的最小面积矩形】,xianshi);102. waitKey(0);103. return0;104. OpenCV3.0版本cppview plaincopy1. #include2. #include3. #defineBIN_DIV1204. 5. usingnamespacestd;6. usingnamespacecv;7. 8. intmain()9. 10. MatsrcImg=imread(haha.jpg);11. Matxianshi=srcImg.clone();12. MatredChannel;13. namedWindow(【原图】,WINDOW_NORMAL);14. imshow(【原图】,srcImg);15. MatgrayImg;16. vectorchannels;17. split(srcImg,channels);18. /cvtColor(srcImg,grayImg,COLOR_BGR2GRAY);19. grayImg=channels.at(0);20. redChannel=channels.at(2);21. namedWindow(【灰度图】,WINDOW_NORMAL);22. imshow(【灰度图】,grayImg);23. /均值滤波24. blur(grayImg,grayImg,Size(20,20),Point(-1,-1);25. namedWindow(【均值滤波后】,WINDOW_NORMAL);26. imshow(【均值滤波后】,grayImg);27. /转化为二值图28. MatmidImg1=grayImg.clone();29. introwNumber=midImg1.rows;30. intcolNumber=midImg1.cols;31. 32. for(inti=0;irowNumber;i+)33. 34. uchar*data=midImg1.ptr(i);/取第i行的首地址35. uchar*redData=redChannel.ptr(i);36. for(intj=0;jBIN_DIV&redDatajBIN_DIV/2)39. dataj=0;40. else41. dataj=255;42. 43. 44. namedWindow(【二值图】,WINDOW_NORMAL);45. imshow(【二值图】,midImg1);46. MatmidImg2=midImg1.clone();47. Matelement=getStructuringElement(MORPH_RECT,Size(20,20);48. morphologyEx(midImg1,midImg2,MORPH_OPEN,element);49. namedWindow(【开运算后】,WINDOW_NORMAL);50. imshow(【开运算后】,midImg2);51. coutmidImg1.channel=midImg1.channels()endl;52. coutmdiImg1.depthmidImg1.depth()endl;53. /查找图像轮廓54. MatmidImg3=Mat:zeros(midImg2.rows,midImg2.cols,CV_8UC3);55. vectorvectorcontours;56. vectorhierarchy;57. findContours(midImg2,contours,hierarchy,RETR_CCOMP,CHAIN_APPROX_SIMPLE);58. intindex=0;59. for(;index=0;index=hierarchyindex0)60. 61. Scalarcolor(255,255,255);62. drawContours(midImg3,contours,index,color,NULL,8,hierarchy);63. 64. namedWindow(【轮廓图】,WINDOW_NORMAL);65. imshow(【轮廓图】,midImg3);66. MatmidImg4=midImg3.clone();67. /创建包围轮廓的矩形边界68. for(inti=0;icontours.size();i+)69. 70. /每个轮廓71. vectorpoints=contoursi;72. /对给定的2D点集,寻找最小面积的包围矩形73. RotatedRectbox=minAreaRect(Mat(points);74. Point2fvertex4;75. box.points(vertex);76. /绘制出最小面积的包围矩形77. line(xianshi,vertex0,vertex1,Scalar(100,200,211),6,LINE_AA);78. line(xianshi,vertex1,vertex2,Scalar(100,200,211),6,LINE_AA);79. line(xianshi,vertex2,vertex3,Scalar(100,200,211),6,LINE_AA);80. line(xianshi,vertex3,vertex0,Scalar(100,200,211),6,LINE_AA);81. /绘制中心的光标82. Points1,l,r,u,d;83. s1.x=(vertex0.x+vertex2.x)/2.0;84. s1.y=(vertex0.y+vertex2.y)/2.0;85. l.x=s1.x-10;86. l.y=s1.y;87. 88. r.x=s1.x+10;89. r.y=s1.y;90.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国海峡人才市场将乐工作部见习生招聘2人模拟试卷及1套完整答案详解
- 转移耐药性机制-洞察与解读
- 2025辽宁沈阳城市建设投资集团有限公司所属企业沈阳城投新能源集团有限公司市场化选聘职业经理人1人模拟试卷及答案详解(考点梳理)
- 砖木结构力学-洞察与解读
- 2025福建泉州广播电视台专项招聘编制内高层次人才12人模拟试卷及1套参考答案详解
- 2025年哈尔滨市南岗区人民医院招聘3人模拟试卷及参考答案详解1套
- 2025呼伦贝尔扎兰屯市教育系统“校园引才”考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年福建省泉州市晋江安海职业中专学校招聘若干人考前自测高频考点模拟试题完整答案详解
- 2025福建泉州市安溪县部分公办学校专项招聘编制内新任教师65人(三)模拟试卷完整答案详解
- 2025年济宁金乡县事业单位公开招聘工作人员(教育类)(39人)模拟试卷附答案详解(模拟题)
- 网络安全防护策略与加固方案报告模板
- 新产品开发流程及管理制度
- “一网统管”在城市治理协同中的障碍与解决路径研究
- 2025至2030中国电线电缆行业十四五发展分析及投资前景与战略规划报告
- 2025至2030全球与中国氘代化合物行业市场发展现状及竞争格局与前景预测报告
- 子宫肌瘤教学查房
- 过敏性休克抢救及处理流程
- 拆迁商铺置换协议书
- 《当代建筑设计理念》课件
- DB2303T 021-2024柞蚕脓病防治技术规程
- 煤矿事故汇报程序
评论
0/150
提交评论