AI识别物体是比较成熟的技术,然而在场景比较单一的地方,用AI做视频感觉有点大材小用。
其实在场景比较单一的情况下,很多实例都可以通过颜色来区分不同的物体,但是我们知道,在实际应用中,总会有光照或者其他的影响,加大我们的颜色判断难度。我这里根据我的业务场景找到一个比较好的红色提取思路。
我是对每个三通道的像素点进行分析:

  1. 将图片从其他格式转换为rgb
  2. 红色像素值最大,且大于0x55
  3. 其他通道像素值的距离比较小,且与红色像素值的距离比率较大,且大于10。
int is_red_point(unsigned char color[3])
{int t[3];for (int i = 0; i < 3; i++){t[i] = color[i] - color[(i + 1) % 3];}if (t[0] > 0 && t[2] < 0 && abs(t[1]) * 5 < t[0] && color[0] > 0x55 && t[0] > 10) {return 1;}return 0;
}

整个代码:

#include <stdio.h>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int is_red_point(unsigned char color[3])
{int t[3];for (int i = 0; i < 3; i++){t[i] = color[i] - color[(i + 1) % 3];}if (t[0] > 0 && t[2] < 0 && abs(t[1]) * 5 < t[0] && color[0] > 0x55 && t[0] > 10) {return 1;}return 0;
}int main(int argc, char *argv[])
{//通过图片进行测试const char *video_path = "1555645683653_1.jpg";Mat im = imread(video_path);imshow("abc1", im);// 转换为rgbMat im_rgb;cvtColor(im, im_rgb, CV_BGR2RGB);Mat img = Mat(im.rows, im.cols, CV_8UC1);printf("%d, %d, %ld, %ld, %ld\n", im.rows, im.cols, im.step[0], im.step[1], im.step[2]);for (int i = 0; i < im_rgb.rows; i++){for (int j = 0; j < im_rgb.cols; j++){unsigned char *a = &(im_rgb.data[i * im_rgb.step[0] + j * im_rgb.step[1]]);if (is_red_point(&(im_rgb.data[i * im_rgb.step[0] + j * im_rgb.step[1]]))){img.data[i * im_rgb.cols + j] = 255;}else{img.data[i * im_rgb.cols + j] = 0;}}}Mat result;add(im, NULL, result, img);imshow("abc", result);waitKey(0);// 一个像素点的测试实例unsigned char test[3] = {0x23, 0, 0xFC};if (is_red_point(test)) //#2300FC{printf("is red!\n");}else{printf("not red!\n");}return 0;
}

原图

通过像素判断处理后的掩码图片覆盖后的图片:

思路很简单,但是从中可以看到,像素值其实有很多关系,找到了关系,处理起来也是比较容易的。

opencv 切取红色相关推荐

  1. OpenCV实例 识别红色瓶盖并框出

    学完opencv和图像处理基础部分后,可以找一些实例来考察自己的掌握程度,难度一点一点上升. 要求:使用opencv,实现对图中瓶盖的提取,并画框圈出 这个实例虽然简单,但也是个完整的图像识别的过程, ...

  2. java wav 切割_WAV音频定长分段切取

    出于研究项目的需要,我需要设计一个WAV音频文件定长切取的小功能:给定一个WAV文件.一组记录时间信息的数组t_Array以及一个阈值ΔT,要求从这个文件中切取出以t_Array记录的每个时刻t为中心 ...

  3. Jmeter 正则表达式提取器——身份证切取

    Jmeter 正则表达式提取器--身份证切取 正则表达式提取器是: 在同一个线程组内,当前的B请求需要获取A请求返回的数据作为参数,这也是常说的关联,将上一个请求的响应结果作为下一个请求的参数,则需要 ...

  4. 「PS技巧」教你如何快速抠取红色合同印章,大兵SEO博客

    「PS技巧」:教你如何快速抠取红色合同印章 1.首先需要用PS选取工具框选出要抠取的红印章: 2.然后点击PS菜单选项"选择"-"颜色范围": 3.吸取红印章的 ...

  5. 结合tkinter与opencv爬取豆瓣电影(2

    结合tkinter与opencv爬取豆瓣电影(2 先看下效果^ ^ 嘻嘻 注:本片为上一篇文章实现爬取豆瓣电影的优化版 除源代码外,其他皆与结合tkinter与opencv爬取豆瓣电影(1 相同 直接 ...

  6. 结合tkinter与opencv爬取豆瓣电影

    结合tkinter与opencv爬取豆瓣电影(1 前言:练习python爬虫技术 文章声明:广搜多方资源,如有侵权,请立即联系本人修改 -------------------------- 一.学习前 ...

  7. opencv颜色识别-红色

    前言 在进行opencv的颜色处理的时候,发现HSV通道进行阈值化的效果优于BGR通道,因此采用了HSV通道进行阈值划分,但是在识别红色时发现了一个问题,在opnecv中,HSV通道被划分为以下范围 ...

  8. H5使用canvas抠取红色印章

    实现抠取纸张上盖的红色印章,这个函数很简单,传入url,返回一个base64格式的印章图片 GTRS.convertToTransparent(url,callback); <!DOCTYPE ...

  9. 利用OpenCV求取图像的重心

    转自:http://blog.csdn.net/lxiaoxiaot/article/details/6539834 不规则区域的矩,表示把一个归一化的灰度级图像函数理解为一个二维随机变量的概率密度. ...

  10. opencv python3 找图片色块_在python3下使用OpenCV 抓取摄像头图像提取蓝色

    工作中需要对摄像头进行调试, Python平台大大提高调试效率. 从网找到段代码, 可以从摄像头图像中抠出蓝色. import cv2 import numpy as np cap = cv2.Vid ...

最新文章

  1. inputstream怎么写给前端_写给“正在焦虑的设计师们”的一封信
  2. 一篇综述带你全面了解迁移学习的领域泛化(Domain Generalization)
  3. 【组合数学】组合恒等式 ( 变下项求和 3 组合恒等式 | 变下项求和 4 组合恒等式 | 二项式定理 + 求导 证明组合恒等式 | 使用已知组合恒等式证明组合恒等式 )
  4. 细说plsql中的空值表达式
  5. 支付宝支付内容 尚未完成
  6. PyTorch系列入门到精通——张量简介及创建
  7. orcadcapture安装_OrCAD下载
  8. Objective-C 函数(方法)的定义和调用
  9. python短文本数据集的关联性_短文本分析----基于python的TF-IDF特征词标签自动化提取...
  10. 焊工双证是哪两证?考焊工证大概需要多少钱?
  11. 多个同1div float left换行题
  12. linux sql server 迁移,SQL Server2008 实例数据迁移步骤
  13. 尚硅谷大厂面试题第二季周阳主讲整理笔记【涨薪必看】
  14. oracle v session表,Oracle技术之V$SESSION_LONGOPS超过系统时间
  15. Warshall沃舍尔算法
  16. 安卓Apk安装过程,社招面试心得
  17. 数据库 --关联查询(多表查询)
  18. 多目标优化(一)简单的 NSGA-Ⅱ
  19. lbe+android6.0+免root,LBE安全大师(免ROOT)
  20. 简述什么是图灵机_图灵机简介和原理分析

热门文章

  1. 尚学堂视频笔记三:容器
  2. 用python画股票行情图
  3. 数字类型与列表——python
  4. 职能部门绩效考核指标设置
  5. 翼支付杯大数据建模大赛-季军方案
  6. 【在野利用】Apple Mail多个严重漏洞在野利用通告
  7. 廊坊金彩教育:如何进行选品
  8. CorelDRAW教程大全集
  9. CY5-N-羟基琥珀酰亚胺|cas146368-14-1|荧光量子产率
  10. 高一的我曾对自己说要放慢脚步去生活!?