CyberLink YouCam 新人求教一个绿色背景提取红色小球的问题



http://www.opencv.org.cn/forum.php?mod=viewthread&tid=36980&page=1
http://blog.csdn.net/chenxun_2010/article/details/38439129


CyberLink YouCam是总部位于中国台湾省的讯连科技CyberLink旗下一款摄像头增加特效的软件,通过这个软件,可以让你的摄像头显示出很特殊效果。趣味写真随时玩、网路视讯更精彩。

最新版本YouCam 5是一套强大的视讯互动应用软件,能满足您在视讯使用时所需的一切功能。无论是与朋友视讯交谈时,增添乐趣的趣味特效功能,或是功能强大的简报工具、视讯会议工具等....,YouCam 5都能全部包办,全面为您的工作及娱乐生活精彩加分!

  


功能

编辑

1.酷炫的互动式特效

可尽情发挥创意、制作专属头像; 丰富的头像特效范本; 五彩缤纷的炫丽特效; 神奇的3D 虚拟物件; 利用头部配件特效增加聊天趣味;2.丰富有趣的视讯特效

让聊天更生动活泼的情绪特效; 利用变形特效自娱娱人;

3.与更多人一同分享! 将影片或相片直接上传至Face book;

上传宽萤幕格式影片至YouTube;

支援各式即时通讯工具,如qq等。

4.视讯监控功能

5.线上视讯简报CyberLink YouCam

6.录制HD高画质影片

7.双视讯画面支援

8.脸孔登入功能- 特别适合家庭与个人用户

9.Face-out (智慧登出锁定)功能

10.脸部追踪技术


词条标签:
 软件  , 计算机学


新人求教一个绿色背景提取红色小球的问题

发表于 2014-9-13 16:35:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

origin.jpg (29.18 KB, 下载次数: 20)

下载附件

如图

2014-9-13 16:24 上传




如图,红球上有灯光照射的亮斑,我用open算法处理后亮斑消失,但颜色还是不均匀,我用的是rgb空间提取红色进行二值化的,所以设的红色范围比较宽,这样容易受其他干扰,请教一下怎么让球的颜色均匀一点,或者用hsv空间会不会好点?(我不会用hsv提取红色,转到hsv后图片就会变得很奇怪。。。。。。)

opened_image.jpg (14.27 KB, 下载次数: 13)

下载附件

2014-9-13 16:28 上传



发表于 2014-9-17 16:58:33 | 只看该作者
看看这个
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>
#include <io.h>
#include <iostream>
#include <stdio.h>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"                                                                     
#include <math.h>
#include <string>
#include <time.h>
using namespace cv;
using namespace std;

int main()
{
        cv::Mat ma = imread("C:\\ball.jpg",0);
        cv::Mat mb = imread("C:\\ball.jpg",01);
    vector<std::vector<cv:oint>> contours;
        cv::threshold(ma,ma,160,255,cv::THRESH_BINARY);
        cv::imshow("ball",ma);
        cv::findContours(ma,contours,0,1);   
        int cmax = 0;
        //在这种循环下面,最后一个就是最大的数据
        vector<vector<oint>>::const_iterator itc = contours.begin();
        while(itc!=contours.end())
        {
                if (itc->size()>cmax)
                {
                        cmax = itc->size();
                        ++itc;
                }
                else
                {
                        itc = contours.erase(itc);
                }
        }
        if (contours.size() <= 0)//如果没有数据
        {
                return 0;//error
        }
        drawContours(mb,contours,-1,Scalar(255),1);
        cv::imshow("ballb",mb);
        cvWaitKey(0);
        return 0;
}
 
 
  
jsxyheu2014 当前离线
积分
103
查看详细资料
3#
发表于 2014-9-17 16:58:51 | 只看该作者
  1. #include "stdafx.h"
  2. #include <cv.h>
  3. #include <cxcore.h>
  4. #include <highgui.h>
  5. #include <stdio.h>
  6. #include <io.h>
  7. #include <iostream>
  8. #include <stdio.h>
  9. #include "opencv2/highgui/highgui.hpp"
  10. #include "opencv2/imgproc/imgproc.hpp"                                                                     
  11. #include <math.h>
  12. #include <string>
  13. #include <time.h>
  14. using namespace cv;
  15. using namespace std;

  16. int main()
  17. {
  18.         cv::Mat ma = imread("C:\\ball.jpg",0);
  19.         cv::Mat mb = imread("C:\\ball.jpg",01);
  20.     vector<std::vector<cv::Point>> contours;
  21.         cv::threshold(ma,ma,160,255,cv::THRESH_BINARY);
  22.         cv::imshow("ball",ma);
  23.         cv::findContours(ma,contours,0,1);   
  24.         int cmax = 0;
  25.         //在这种循环下面,最后一个就是最大的数据
  26.         vector<vector<Point>>::const_iterator itc = contours.begin();
  27.         while(itc!=contours.end())
  28.         {
  29.                 if (itc->size()>cmax)
  30.                 {
  31.                         cmax = itc->size();
  32.                         ++itc;
  33.                 }
  34.                 else
  35.                 {
  36.                         itc = contours.erase(itc);
  37.                 }
  38.         }
  39.         if (contours.size() <= 0)//如果没有数据
  40.         {
  41.                 return 0;//error
  42.         }
  43.         drawContours(mb,contours,-1,Scalar(255),1);
  44.         cv::imshow("ballb",mb);
  45.         cvWaitKey(0);
  46.         return 0;
  47. }
复制代码
 
 
  
古道023 当前离线
积分
7
查看详细资料
4#
 楼主 | 发表于 2014-9-20 17:54:18 | 只看该作者

太感谢了,这是一个新思路呀,
 
 
  
jsxyheu2014 当前离线
积分
103
查看详细资料
5#
发表于 2014-9-21 00:19:59 | 只看该作者
话说这不是正常的思路吗。
 
 
  
古道023 当前离线
积分
7
查看详细资料
6#
 楼主 | 发表于 2014-9-21 16:13:57 | 只看该作者
jsxyheu2014 发表于 2014-9-21 00:19
话说这不是正常的思路吗。

哦,我是在二值化提取红色后再用轮廓检测补全的。还有我有个问题,对大神来说是举手之劳了,
vector<Point2f>center( contours.size() );
然后怎么打印center里买的坐标值,原帖地址:“
求教一个minEnclosingCircle打印匹配圆中心点坐标的问题”
http://www.opencv.org.cn/forum.p ... 0&fromuid=45400
(出处: OpenCV中文网站)
 
 
  
zxd675816777 当前离线
积分
9
查看详细资料
7#
发表于 2014-9-22 07:42:35 | 只看该作者
在颜色空间上面进行检测是一个思路,像让颜色均匀一点儿的话,可以进行分别对三个通道L0Smooth(这个没有自带的,需要看算法自己写),然后用大津法进行二值化,提取轮廓线,用fitellipse或者其他拟合函数进行圆或者椭圆的拟合就行。
 
 
  
古道023 当前离线
积分
7
查看详细资料
8#
 楼主 | 发表于 2014-9-24 08:06:43 | 只看该作者
zxd675816777 发表于 2014-9-22 07:42
在颜色空间上面进行检测是一个思路,像让颜色均匀一点儿的话,可以进行分别对三个通道L0Smooth(这个没有自 ...

谢谢指点,我试试看能不能做到
 
 
  
lzp_java 当前离线
积分
21
查看详细资料
9#
发表于 2014-9-28 18:17:31 | 只看该作者
对于提取颜色相对比较纯的物体,建议吧图像RGB转HSV再分析。单纯的RGB不是很容易提取的。求出小球的Histogram,后面只要是类似于红色小球的都会被提取出来。建议参考OpenCV里面的camShift,我也是最近有个项目需求才注意这个的,具体就是在一块PCB板子上面提取出锡膏和焊盘的位置在检测锡膏大小高度等
 
 
  
lzp_java 当前离线
积分
21
查看详细资料
10#
发表于 2014-9-28 18:25:14 | 只看该作者




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值