【OpenCV学习】抠图
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
#include "cv.h" #include "highgui.h" #include <stdio.h>CvPoint prev_pt={-1,-1} ; CvPoint pt_beg={-1,-1},pt_end = {-1,-1}; CvPoint pt1={-1,-1},pt2={-1,-1}; CvRect rect; IplImage *src; IplImage *tmp;void onMouse(int event,int x,int y,int flags,void *param);int main(int argc,char **argv) { IplImage *dst; int c; if ((argc !=2)||!(src=/blog.armyourlife.info/cvLoadImage(argv[1],1))) { printf("Error when Loading the Picture....Exit/n"); return -1; }cvNamedWindow("SRC",1); cvShowImage("SRC",src); tmp = cvCloneImage(src);cvSetMouseCallback("SRC",onMouse,0);for (;;) { c = cvWaitKey(10); if ((char)c=='c') { if (pt_beg.x!=-1) { rect.x = min(pt_beg.x,pt_end.x); rect.y = min(pt_beg.y,pt_end.y); rect.height = abs(pt_end.y-pt_beg.y); rect.width = abs(pt_end.x-pt_beg.x); printf("RECT:height=%d,width=%d/n",rect.height,rect.width); cvSetImageROI(src,rect); printf("ROI:Height=%d,Width=%d./n",src->roi->height,src->roi->width); dst = cvCreateImage(cvSize(rect.width,rect.height),src->depth,src->nChannels); dst = cvCloneImage(src); printf("DST Height=%d,Width=%d/n",dst->height,dst->width); cvNamedWindow("Selected",1); cvShowImage("Selected",dst); cvSaveImage("selected.jpg",dst); printf("Finished!/n"); cvWaitKey(0); cvDestroyWindow("Selected"); cvReleaseImage(&dst); break; } } else if ((char)c==27) //ESC to exit { cvReleaseImage(&tmp); cvReleaseImage(&src); cvDestroyWindow("SRC"); break; } } return 0; }void onMouse(int event,int x,int y,int flags,void *) { printf("x=%d,y=%d./n",x,y); printf("Begin:x=%d,y=%d./n",pt_beg.x,pt_beg,y); printf("END:x=%d,y=%d./n",pt_end.x,pt_end.y); if (!tmp) { return ; }/*判断左键是否放开,并且没有进行拖拽*/ if (event == CV_EVENT_LBUTTONUP||!(flags & CV_EVENT_FLAG_LBUTTON)) {//CV_EVENT_LBUTTONUP左键放开,CV_EVENT_FLAG_LBUTTON左键拖拽, prev_pt=cvPoint(-1,-1); }/*若左键按下则记录为起始点*/ else if (event == CV_EVENT_LBUTTONDOWN) { prev_pt = cvPoint(x,y); pt_beg = cvPoint(x,y); }/*若鼠标在滑动,并且在拖拽状态*/ else if (event == CV_EVENT_MOUSEMOVE && (flags && CV_EVENT_FLAG_LBUTTON) ) { cvCopy(src,tmp); CvPoint pt =cvPoint(x,y);/*得到另外两个点,以便进行矩形拖动绘制*/ pt1.x = pt.x; pt1.y = prev_pt.y; pt2.x = prev_pt.x; pt2.y = pt.y;cvLine( tmp, prev_pt, pt1, cvScalarAll(255), 2, 8, 0 ); cvLine( tmp, prev_pt, pt2, cvScalarAll(255), 2, 8, 0 ); cvLine( tmp, pt1, pt, cvScalarAll(255), 2, 8, 0 ); cvLine( tmp, pt2, pt, cvScalarAll(255), 2, 8, 0 );pt_end = pt; cvShowImage("SRC",tmp); } }
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
【OpenCV学习】抠图相关推荐
- opencv 图像 抠图 算法_opencv提取轮廓与抠图
自然图像抠图/视频抠像技术梳理(image matting, video matting)-计算机视视觉专题1 图像抠图算法学习 - Shared Sampling for Real-Time Alp ...
- 【youcans 的 OpenCV 学习课】7. 空间域图像滤波
专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 [youcans 的 OpenCV 学习课]7. 空间域图像滤波 图像滤波是在尽可能保留图像 ...
- OpenCv学习笔记4--图像分割之GrabCut算法
说明: 本文章是opencv学习笔记系列的第四篇小结,可能前几篇内容太多,排版也不甚合理,所以为了更好的观看体验,这次的内容会稍微少那么一点点,再次重申 所有代码在我的github主页https:// ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
- opencv学习笔记(二):基于肤色的人手检测
opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...
- Python+OpenCV学习(17)---摄像机标定
Python+OpenCV学习(17)---摄像机标定 原文:http://blog.csdn.net/firemicrocosm/article/details/48594897 利用python学 ...
- OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度
OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度 原文:http://blog.csdn.net/zhjm07054115/article/details/26964275 下面的代码通过计 ...
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
- OpenCV学习--saturate_cast防止数据溢出
在OpenCV学习中经常看见saturate_cast的使用,下面的代码会展示它的作用,详细的代码可以参见文章http://blog.csdn.net/mjlsuccess/article/detai ...
- OpenCV学习笔记大集锦
转载自: OpenCV学习笔记大集锦 – 视觉机器人 http://www.cvrobot.net/collect-opencv-resource-learn-study-note-chinese/ ...
最新文章
- 超算学院计算机系吧,上海交通大学计算机科学与工程系(CSE)
- fastjson又被发现漏洞,这次危害可导致服务瘫痪!
- python画图代码彩虹-用python画一颗彩虹色爱心送给女朋友!!!
- leetcode算法题--替换所有的问号
- gj4 深入类和对象
- EnumWindows 使用
- 跨站点脚本(XSS)
- Elasticsearch 7.7.0 基本操作-基于 CMD 命令行
- 如何判断一棵二叉树是完全二叉树(1)
- 计算一个子网掩码有多少个有效ip地址_一个月有多少个工作日,你会计算了吗?...
- Session丢失的解决办法小结(转)
- mysql 5.7 安装后添加root用户
- GMA Round 1 向量计算
- java中spring的注解_Java代码中spring注解浅析
- java程序员和java架构师有什么区别呢?
- Quartz 在线Cron表达式
- 蓝牙信标人员定位技术原理分析
- 自己动手写CPU——寄存器堆、数据存储器(基于FPGA与Verilog)
- 做报表到10点才下班,做的还是丑,怎样才能做出一张好看的报表?
- win10系统,点击连接校园网WLAN后,弹不出登录网页