opencv绘制抠图并保存的问题

WillianF 2014-12-02 10:32:22
请教:我的目的是在MFC中利用opencv完成抠图的功能

点击【打开灰度图】,点击【圆】,可以响应鼠标操作,在左边的图中画一个椭圆,点击【生成】可以将生成的抠图保存下来

,抠出来的图是这样的效果。

但是我想抠出来的图只有椭圆的部分,而不是一个矩形(就是没有黑色的部分),请问该怎么办?
【附核心代码】:
mask=cvCreateImage(mask_size,IPL_DEPTH_8U,1);
CvPoint pt1,pt2;
pt1.x=0;
pt1.y=0;
pt2.x=m_ptEnd.x-m_ptOrigin.x;
pt2.y=m_ptEnd.y-m_ptOrigin.y;
cvRectangle(mask,pt1,pt2, cvScalar(0,0,0),-1,8,0 );//将整个矩形区域绘成黑色
cvEllipse(mask,centerpoint,ellsize,0,0,360,cvScalar(255,255,255),-1,8,0);//将椭圆区域绘成白色

dst_img=cvCreateImage(mask_size,IPL_DEPTH_8U,1);
cvCopy(img,dst_img,mask);//利用mask,打马赛克,只显示特定区域
...全文
547 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sheyoucheng 2016-04-12
  • 打赏
  • 举报
回复
楼主,我最近也在做类似的东西,抠图的,能发一份源代码吗?谢谢!syc839451259@qq.com
WillianF 2014-12-02
  • 打赏
  • 举报
回复
我想达到的效果是这种感觉,(这是我用PS抠出来的)。 但是你说的透明也可以,不知道咋弄啊。。
shiter 2014-12-02
  • 打赏
  • 举报
回复
引用 8 楼 wlfbitfc 的回复:
[quote=引用 7 楼 wangyaninglm 的回复:] [quote=引用 6 楼 wlfbitfc 的回复:] [quote=引用 5 楼 wangyaninglm 的回复:] 使用opencv版本2.4以上,调用cv::Mat img = imread("pic.png", -1)就可以读取4通道的png图像。其中第四个通道的数据类型和其他通道的一样,都是uchar型,完全透明为0,否则为255。 http://blog.csdn.net/wangyaninglm/article/details/41685607 我大概调试了一下,png 的操作,不知道对不对,就是新建一个透明的png图片,完后把你的抠图的部分写进去就好了
靠谱儿,研究一下![/quote] 搞好了,程序贴出来学习一下哇[/quote] 我比较菜,代码写的相当乱,互相学习吧! [/quote] 就是分享学习,嘿嘿嘿
WillianF 2014-12-02
  • 打赏
  • 举报
回复
引用 7 楼 wangyaninglm 的回复:
[quote=引用 6 楼 wlfbitfc 的回复:] [quote=引用 5 楼 wangyaninglm 的回复:] 使用opencv版本2.4以上,调用cv::Mat img = imread("pic.png", -1)就可以读取4通道的png图像。其中第四个通道的数据类型和其他通道的一样,都是uchar型,完全透明为0,否则为255。 http://blog.csdn.net/wangyaninglm/article/details/41685607 我大概调试了一下,png 的操作,不知道对不对,就是新建一个透明的png图片,完后把你的抠图的部分写进去就好了
靠谱儿,研究一下![/quote] 搞好了,程序贴出来学习一下哇[/quote] 我比较菜,代码写的相当乱,互相学习吧!
shiter 2014-12-02
  • 打赏
  • 举报
回复
引用 6 楼 wlfbitfc 的回复:
[quote=引用 5 楼 wangyaninglm 的回复:] 使用opencv版本2.4以上,调用cv::Mat img = imread("pic.png", -1)就可以读取4通道的png图像。其中第四个通道的数据类型和其他通道的一样,都是uchar型,完全透明为0,否则为255。 http://blog.csdn.net/wangyaninglm/article/details/41685607 我大概调试了一下,png 的操作,不知道对不对,就是新建一个透明的png图片,完后把你的抠图的部分写进去就好了
靠谱儿,研究一下![/quote] 搞好了,程序贴出来学习一下哇
WillianF 2014-12-02
  • 打赏
  • 举报
回复
引用 5 楼 wangyaninglm 的回复:
使用opencv版本2.4以上,调用cv::Mat img = imread("pic.png", -1)就可以读取4通道的png图像。其中第四个通道的数据类型和其他通道的一样,都是uchar型,完全透明为0,否则为255。 http://blog.csdn.net/wangyaninglm/article/details/41685607 我大概调试了一下,png 的操作,不知道对不对,就是新建一个透明的png图片,完后把你的抠图的部分写进去就好了
靠谱儿,研究一下!
shiter 2014-12-02
  • 打赏
  • 举报
回复
我猜测应该用背景可以透明的图像格式吧,png什么的吧
shiter 2014-12-02
  • 打赏
  • 举报
回复
使用opencv版本2.4以上,调用cv::Mat img = imread("pic.png", -1)就可以读取4通道的png图像。其中第四个通道的数据类型和其他通道的一样,都是uchar型,完全透明为0,否则为255。 http://blog.csdn.net/wangyaninglm/article/details/41685607 我大概调试了一下,png 的操作,不知道对不对,就是新建一个透明的png图片,完后把你的抠图的部分写进去就好了
WillianF 2014-12-02
  • 打赏
  • 举报
回复
求代码。。。。
ssbqrm 2014-12-02
  • 打赏
  • 举报
回复
说是透明通道只有png格式支持吧。 如果椭圆外面可以是白色的,你可以把原图的椭圆外面的地方涂白就行了

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧