本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下
<强>一,基本原理强>
垫img=imread(图片); 矩形矩形(50、20、200、50); 垫ROI=img(矩形); imshow (“ROI_WIN ROI);
<强>,其中:矩形的函数定义为:矩形(_Tp值,_Tp _y吗,_Tp _width, _Tp _height);
>强_Tp值:表示矩形左上角顶点的x坐标;_Tp _y吗:表示矩形左上角顶点的y坐标;
_Tp _width:表示矩形框的宽度;_Tp _height:表示矩形框的高度
<强>二,具体使用
强>
在一张图片中想手动通过鼠标绘制矩形框的方式来选择多个图片区域并逐一保存,其中主要包括以下几方面的实现:
-
<李>响应鼠标点击事件,绘制矩形框李>
<李>将矩形框中图片进行显示和保存,保存的文件名为ROI_i.jpg,其中我表示我第次绘制的矩形框。
李>
具体实现代码如下:
# include & lt; opencv2/highgui/highgui.hpp> # include & lt; opencv2/核心/core.hpp> # include & lt; opencv2/imgproc/imgproc.hpp> # include & lt; iostream> 使用名称空间的简历; 使用名称空间性病; 简历:垫img; bool select_flag=false; 简历:矩形m_select; 简历:点起源; int ROI_count; 空白onMouseRectPicking (int, int x, int y, int, void *) { 如果(select_flag) { m_select。x=MIN(起源。x, x);//不一定要等鼠标弹起才计算矩形框,而应该在鼠标按下开始到弹起这段时间实时计算所选矩形框 m_select。y=MIN(来源。y, y); m_select。宽度=abs (x - origin.x);//算矩形宽度和高度 m_select。身高=abs (y - origin.y); m_select,=简历::矩形(0,0,img。关口,img.rows);//保证所选矩形框在视频显示区域之内 } 如果事件==CV_EVENT_LBUTTONDOWN) { select_flag=true;//鼠标按下的标志赋真值 起源=简历:点(x, y);//保存下来单击捕捉到的点 m_select=简历:矩形(x, y, 0, 0);//这里一定要初始化、宽和高为(0,0)是因为在opencv中矩形矩形框类内的点是包含左上角那个点的,但是不含右下角那个点 } else if(事件==CV_EVENT_LBUTTONUP) { select_flag=false; ROI_count + +; } } int主要(int命令行参数个数,char * argv []) { img=imread (“/home/了/picture_cut/构建/scenary.jpg”); bool停止=false; 简历:namedWindow (“capframe”, CV_WINDOW_AUTOSIZE); 简历:setMouseCallback (“capframe onMouseRectPicking 0); char pic_name [40]; ROI_count=0; 而(!停止) { img=imread (“/home/了/picture_cut/构建/scenary.jpg”); 简历::矩形(img, m_select简历:标量(255,0,0),2,8,0);//画矩形框 简历:imshow (“capframe”, img); 如果((m_select.x !=0),和(m_select.y !=0),和(m_select.width !=0),和(m_select.height !=0)) { sprintf (pic_name“ROI_ % d.jpg ROI_count); 垫ROI=img (m_select); imshow (“ROI_WIN ROI); imwrite (pic_name ROI); } 字符键=简历:waitKey (30); 如果(键==27) 停止=true; } waitKey (0); 返回0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。