- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
提取图片中任意形状的区域
提取图片中任意形状的区域
????? 正在做一个基于内容的图像检索项目,客户要求可以让用户提取图片上的任意形状的子图作为输入。为了实现这个功能,花了不少精力,中间绕了不少圈子。现在问题总算解决了,把主要的思路记录一下,希望能帮到有同样需求的朋友。
????? 由于这个项目使用了第三方的开源图像库opencv,所以这个功能也是借助opencv来实现的。
????? 首先需要解决的是在图片中绘制曲线的问题,思路很简单,只需要响应鼠标事件通过描点、连线的方式就可以完成。在opencv中需要使用回调来响应鼠标事件,opencv中文站上有很好的示例,关键代码:
#include?cv.h#include?highgui.h#include?stdio.h#include?stdlib.hIplImage*?inpaint_mask?=?0;IplImage*?img0?=?0,?*img?=?0,?*inpainted?=?0;CvPoint?prev_pt?=?{-1,-1};void?on_mouse(?int?event,?int?x,?int?y,?int?flags,?void*?zhang){??if(?!img?)???return;??if(?event?==?CV_EVENT_LBUTTONUP?||?!(flags??CV_EVENT_FLAG_LBUTTON)?)????prev_pt?=?cvPoint(-1,-1);??else?if(?event?==?CV_EVENT_LBUTTONDOWN?)????prev_pt?=?cvPoint(x,y);??else?if(?event?==?CV_EVENT_MOUSEMOVE??(flags??CV_EVENT_FLAG_LBUTTON)?)??{????CvPoint?pt?=?cvPoint(x,y);????if(?prev_pt.x??0?)????prev_pt?=?pt;????cvLine(?inpaint_mask,?prev_pt,?pt,?cvScalarAll(255),?5,?8,?0?);????cvLine(?img,?prev_pt,?pt,?cvScalarAll(255),?5,?8,?0?);????prev_pt?=?pt;????cvShowImage(?image,?img?);??}}int?main(?int?argc,?char**?argv?){???char*?filename?=?argc?=?2???argv[1]?:?(char*)fruits.jpg;???if(?(img0?=?cvLoadImage(filename,-1))?==?0?)?????return?0;???printf(?Hot?keys:?\n???cvNamedWindow(?image,?1?);???img?=?cvCloneImage(?img0?);???inpainted?=?cvCloneImage(?img0?);???inpaint_mask?=?cvCreateImage(?cvGetSize(img),?8,?1?);???cvZero(?inpaint_mask?);???cvZero(?inpainted?);???cvShowImage(?image,?img?);???cvShowImage(?watershed?transform,?inpainted?);???cvSetMouseCallback(?image,?on_mouse,?0?);???}
效果如下:
?????????????
???? ??? 第二步,利用封闭曲线提取图形,时间和精力都主要浪费在这一块了,最开始的想法是通过扫描线的方法获取,但最终做出来的效果差强人意,连自己这关都过不了。最后几经转折,找到了这样一个函数cvFloodFill(),这个函数可根据边界填充图像连通域,正是我所需要的。关键代码:
????????if(event?==?CV_EVENT_RBUTTONUP)????{????????cvFloodFill(maskImg,cvPoint(x,y),cvScalarAll(255));????????cvSaveImage(maskImg.bmp,maskImg);????????IplImage?*segImage=cvCreateImage(cvGetSize(img),8,3);;????????cvCopy(img,segImage,maskImg);????????cvSaveImage(se
您可能关注的文档
- 八上语文第六单元复习导学案.doc
- QA过程 0509 .ppt
- 电厂锅炉运行试卷 二 .doc
- 《概率论与数理统计及其应用》答案.doc
- 哈威M4阀拆解过程及工作原理.ppt
- 北四轨道绞车主轴找正施工措施.doc
- 小学三年级《信息技术》教学计划_教学进度表.doc
- ___正弦定理和余弦定理.ppt
- PH-070A培养干燥两用箱.ppt
- 语法精选300题.doc
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江西省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年安徽省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年福建省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年广东省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年河南省高考英语试卷(含答案解析)+听力音频.docx
- 2024年湖北省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年湖南省高考英语试卷(含答案解析)+听力音频+听力原文.docx
- 2024年江苏省高考英语试卷(含答案解析)+听力音频+听力原文.docx
文档评论(0)