提取图片中任意形状的区域

opencv实现抠图,图像拼接,图像融合 在OpenCV中,你可以使用图像拼接、抠图和将图像的一部分放在另一张图片的指定位置。 阅读详情

     
正在做一个基于内容的图像检索项目,客户要求可以让用户提取图片上的任意形状的子图作为输入。为了实现这个功能,花了不少精力,中间绕了不少圈子。现在问题总算解决了,把主要的思路记录一下,希望能帮到有同样需求的朋友。

      由于这个项目使用了第三方的开源图像库opencv,所以这个功能也是借助opencv来实现的。

      首先需要解决的是在图片中绘制曲线的问题,思路很简单,只需要响应鼠标事件通过描点、连线的方式就可以完成。在opencv中需要使用回调来响应鼠标事件,opencv中文站上有很好的示例,关键代码:



#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>

IplImage* 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(),这个函数可根据边界填充图像连通域,正是我所需要的。关键代码:

Code

 

效果如下:

            

 

      

 

 

分类:  图像工程
标签:  图像处理,  图像检索

C++ opencv 图片截取不规则ROI区域并将其他区域透明化 目的 将图片内不规则的ROI区域截取下来后,将非ROI区域的像素删除. 主要函数 cvFloodFill() cvOr()(注: 与cvAnd用法雷同) 代码实现 IplImage *ipl_img = cvLoadImage("7890.jpg"); // 将ROI区域用cvLine包裹 cvLine(ipl_img, cvPoint(50, 100), cvPoint(70, 150), CV_RGB(255,255,255), 2, 8, 1); cvLine(ipl_img, cvP 阅读详情

相关推荐

Opencv C++ 提取图片中目标矩形区域并摆正

一次机器人视觉作业的分享,作业内容是将图片中的书本提取成图像并摆正

qq_52618119的博客 1813

opencv+python 抠取图片中任意形状部分

opencv+python 抠取图片中任意形状部分 矩形: mask = np.zeros([300, 300], dtype=np.uint8) #[300,300]为被抠取图片的尺寸,若为灰度图可直接写成img.shape cv2.rectangle(mask,(mask[x1,y1],mask[x2,y2]),(255,255,255),-1) #mask[x1,y1],mask[x2,y2]为矩形的坐上和右下坐标 get_img = cv2.add(img, np.zeros(np.shape(im

qq_42921357的博客 6146

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

(转载)OpenCV_提取图片中任意形状的区域

OpenCV_提取图片中任意形状的区域 转载自:http://blog.youkuaiyun.com/hanbinga17/article/details/6536331# -------------------------------------------------------------------------------------------------------------------

1万+

ROS2仿真抓取分拣案例,使用myCobot 280机械臂结合ROS2系统搭建机械分拣站

本案例展示了如何利用myCobot 280 urdf模型构建一个对象分类站,并在ROS2 jazzy中完成运动规划。

m0_71627844的博客 2126

基于FPGA的ov5640摄像头简易图像采集装置详解

本文介绍一种基于FPGA的,通过流模式DDR实现OV5640摄像头数据采集并显示的方法。

qq_42230252的博客 1万+

提取圖片中任意形狀的區域

http://www.cnblogs.com/saintbird/archive/2008/10/27/1305003.html  正在做一個基於內容的圖像檢索項目,客戶要求可以讓用戶提取圖片上的任意形狀的子圖作為輸入。為了實現這個功能,花了不少精力,中間繞了不少圈子。現在問題總算解決了,把主要的思路記錄一下,希望能幫到有同樣需求的朋友。       由於這個項目使用了第三方的開源圖像

I am Rocky 2241

Shader之——花草动画shader

今天 ,接到了个需求,花草的动画。谈到花草动画,立马就想到顶点动画,让顶点动起来就可以实现了。但是有个问题,所有的草都往一个方向运动,这个就麻烦了。因为在shader里没有随机这种概念,提到最多的是用一张噪声图来模拟。在网上搜索了一下,发现有更好的办法,就是用每个顶点到一个点的距离来控制动画的开始,毕竟每个顶点到同一个点的距离很少是一样的。 float dis = distance ...

baicaishisan的博客 2184

OpenCV_提取图片中任意形状的区域

OpenCV_提取图片中任意形状的区域 转载自:http://blog.youkuaiyun.com/hanbinga17/article/details/6536331# ---------------------------------------------------------------------------------------------------------------

yansmile1的专栏 3228

从三极管到MOS管:单片机I/O口驱动电路设计实战解析

本文深入解析了从三极管到MOS管的单片机I/O口驱动电路设计实战经验。通过对比三极管与MOS管的本质区别,结合实际案例详细讲解了驱动电路的设计要点、优化技巧及常见问题解决方案,帮助工程师高效完成各类负载驱动设计。

weixin_29161785的博客 320

DB2__基本概念——联邦

建立联邦 优点:优点是数据仍然保留在原来的存储位置,而不必建立一个集中的式数据仓储。  缺点:数据联邦查询反映会慢,不适合频繁查询,而且容易出现锁争用和资源冲突等问题 建立联邦表步骤 前提条件:知道两个数据库的ip,用户名,密码及被连数据库的版本 eg:  数据库  qqdb  ip: 22.5.225.225   端口:50000    密码:123456        数据库   ...

qq_38569524的博客 1257

opencv抠出圆形区域_OpenCV_提取图片中任意形状的区域

OpenCV_提取图片中任意形状的区域----------------------------------------------------------------------------------------------------------------------------------------------正在做一个基于内容的图像检索项目,客户要求可以让用户提取图片上的任意形状的子图...

weixin_39849418的博客 2440

ESP32-C3模组上跑通OTA升级(3)

ESP32-C3模组上跑通OTA升级(3)

phmatthaus的专栏 1351

Aurora 8b/10b光口互联实战:ZYNQ板间高速通信设计与调试

高速串行通信是FPGA互联的核心技术,通过GT收发器实现低延迟、高带宽的点对点数据传输。Aurora 8b/10b协议作为轻量级链路层方案,省去复杂网络栈,直接利用8b/10b编码保证直流平衡和时钟恢复,在Xilinx平台上集成度高、调试简便。其技术价值在于协议开销小、实时性强,适用于数据采集、视频传输和核间通信等场景。在ZYNQ板间互联中,合理配置Lane数量和线速率,结合SFP光模块与GT资源,可构建稳定链路。本文聚焦Aurora 8b/10b的硬件搭建、IP核配置及误码率优化,分享从自环测试到双板联调

weixin_34252686的博客 217

思维链:让AI更接近人类思维的技术

本文将探讨一种名为“思维链”的技术,它旨在让AI更接近人类思维。文章首先介绍了问题背景与核心概念,接着讲解了算法原理和数学模型,随后阐述了系统分析与架构设计,最后通过项目实战展示了思维链的实际应用,并提供了最佳实践和小结。思维链是一种旨在模拟人类思维过程的技术,它通过构建一系列相互关联的思维方式,实现对复杂问题的分析和解决。思维链算法是一种基于人类思维过程的人工智能算法,它通过构建一系列思维链,实现对问题的分析和解决。智能问答系统是一种常见的人工智能应用,它能够回答用户提出的各种问题。

AI天才研究院 943

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

提取图片中任意形状的区域(我的简单修改及代码)

http://hi.baidu.com/beansteven/item/c007875e89d43fced3e10cdd     我根据这位达人的信息http://hi.baidu.com/yibobin/blog/item/a55e162a7b18273ad52af164.html 将其程序简单的修改,得出如下实现代码: #include #include #pragma 

xgwdy06的专栏 1614

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

qt保存非矩形图片

截取后: 想要截取保存任意形状图片,方法很简单: 1.假设截取图形为多边形qpolygon0, 2.获取截取图形的外接矩形qrect0,先把原图截取rect0区域作为QImage1 3.然后把QImage1的图片中,在qpolygon0内的像素的alpha通道设置为255,在qpolygon0之外的像素的alpha通道设置为0即可。 4.保存的时候保存成PNG格式即可 核心代码如下: QImage img = QImage(filename);//img为原图 img = img.convertToFo.

weixin_43935474的博客 708

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

opencv 任意图形截取

转自:http://blog.youkuaiyun.com/wuxiaoyao12/article/details/7305865 得到任意形状区域 第一步、在图片上画出来 #include "cv.h" #include "highgui.h" #include #include IplImage* inpaint_mask = 0; IplImage* im

yueguanyun的专栏 3688

cv2 python 获取斑马线_用 OpenCV 去除图片中的水印,骚操作!

点击上方 小张Python,加为星标第一时间收到 Python 技术干货!参考连接:https://stackoverflow.com/questions/32125281/removing-watermark-out-of-an-image-using-opencv好久不见,大家好啊,最近太忙了,搞得好久没更原创文了(说到底还是懒,),这两天在 Stackoverflow 上面看到了一个有趣的案...

weixin_39736547的博客 153

matlab提取多边形区域_Matlab | 提取图像ROI任意形状

前言本文给出在matlab中如何提取图像任意形状的感兴趣(ROI)区域的程序及分析。程序程序如下:clc;clear;I=imread('1.bmp'); % 读取一张图片imshow(I); % 显示原始图像i=rgb2gray(I); % 变为灰度图像[c,r]=ginput(20); % 20表示点选次数,20个点连线成多边形,生成感兴趣区域。BW=...

weixin_39846378的博客 5183
上一篇: SIFT算法学习小记
下一篇: 磁盘管理工具Acronis Disk Director Suite
ding_net
博客等级 码龄25年 40粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值