【Opencv】OSD反色处理

2024-01-26 08:18
文章标签 opencv 处理 osd 反色

本文主要是介绍【Opencv】OSD反色处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过上一篇博文【海思】利用opencv给海思抓拍图像加OSD,现在已经可以在摄像头抓拍照片的基础上进行OSD叠加了,同时也实现了背景色透明的OSD叠加。基于上一篇结尾留出的小问题,今天利用Opencv实现了叠加字体的反色,从而使得OSD在图片中更为突出。
具体思路如下:
1、获取OSD中每个字符将要叠加到原图的区域
2、根据区域获取原图在此区域的平均灰度值
3、若平均灰度值大于某一值(即偏白色),则将OSD位图相应区域重画为黑色,否则(偏黑色)不做处理,因为生成的字符串是本来就是白色的。

我封装了一个函数,专门处理反色操作,代码如下

//base_image    : 原图
//osd_image     : OSD图
//region_start_h: OSD水平初始坐标
//region_start_v: OSD垂直初始坐标
//FONT_SIZE     : 字体大小
static void invertColors(Mat &base_image,Mat &osd_image,int region_start_h,int region_start_v)
{int i,j,k;Mat mean,stddev;for(i = 0;i < osd_image.cols / (FONT_SIZE / 2); i++){//获取字符区域的平均灰度值meanStdDev(base_image(Rect(region_start_h + i*FONT_SIZE/2,region_start_v,FONT_SIZE,FONT_SIZE/2)),mean,stddev);printf("avg %d = %d\n",i+1,int(mean.at<double>(0,0)));//如果大于140,则该区域偏白,需要把字变黑if(int(mean.at<double>(0,0))  > 140){//变黑,像素操作for(j = i*20; j < i*20 + FONT_SIZE / 2; j++){for(k = 0;k < FONT_SIZE;k++){if(osd_image.at<Vec3b>(k,j)[0] != 0&& osd_image.at<Vec3b>(k,j)[1] != 0&& osd_image.at<Vec3b>(k,j)[2] != 0){osd_image.at<Vec3b>(k,j)[0] = 10;osd_image.at<Vec3b>(k,j)[1] = 10;osd_image.at<Vec3b>(k,j)[2] = 10;}}}}}mean.release();stddev.release();
}

搭建“苛刻”的拍照背景,以使验证效果更明显,拍得并处理后的照片如下,与预期相符。请忽略我那凌乱不堪而又“破旧”的小工位 =。=
在这里插入图片描述

这篇关于【Opencv】OSD反色处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646173

相关文章

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超