资源简介
算法思想:随机在给定的图像中产生多个矩形区域,比较矩形区域内图像相似度,相似度高,则表明黑屏,否则就正常。
PS:相似度用到了余弦值。
代码片段和文件信息
#include
#include
#include “BlackScreenDetect.h“
using namespace std;
using namespace cv;
//构造函数
BlackScreenDetect::BlackScreenDetect(String filePath)
{
this->filePath = filePath;
}
//判断矩形重叠
bool BlackScreenDetect::isOverlap(const Rect &rc1 const Rect &rc2)
{
if (rc1.x + rc1.width > rc2.x && rc2.x + rc2.width > rc1.x && rc1.y + rc1.height > rc2.y && rc2.y + rc2.height > rc1.y)
return true;
else
return false;
}
//随机产生矩形框
vectorBlackScreenDetect::excuteROIs(Mat ROIint ROI_number)
{
//声明一个空的vector
vector rects;
Rect rect;
//产生随机数
//RNG rng;
srand(time(NULL)); /*初始化随机数种子*/ // a = rand() % (d - t) + t; /*生成一个[td)区间内的整数*/
int width = 100;//要设定的框的宽度
int height = 100;//要设定的框的高度
int x;
int y;
int times = 0;
while (true)
{
times++;
//x = rng.uniform(0 ROI.cols);
x = rand() % (ROI.cols); /*生成一个[td)区间内的整数*/
// y = rng.uniform(0 ROI.rows);
y = rand() % (ROI.rows); /*生成一个[td)区间内的整数*/
rect = Rect(x y width height);
//首先判断有无超出边界
if (x + width <= ROI.cols&&y + height <= ROI.rows)
{
if (rects.size() == 0)
{
//vector为空就放进去
rects.push_back(rect);
}
else
{
bool flag = false;
//遍历vector,
for (int i = 0; i < rects.size(); i++)
{
Rect temp = rects[i];
//判断当前矩形是否和vector中的相交
flag = isOverlap(rect temp);
if (flag == true)//有相交
{
break;//跳出遍历
}
}
//没有相交
if (flag == false)
{
//没有相交,就添加
rects.push_back(rect);
//添加完判断下大小
if (rects.size() == ROI_number)//要截取的矩形框个数
break;//跳出while循环
}
}
}
//控制不进入无限循环
if (times>1000000)
{
rects.clear();
return rects;
}
}
cout << “循环次数=“<
//画出矩形框
for (int i = 0; i < rects.size(); i++)
{
cv::rectangle(ROI rects[i] Scalar(0 0255) 1 LINE_8 0);
}
return rects;
}
double BlackScreenDetect::getMinSimilarity(vector rects Mat ROI)
{
Mat ROI1;
Mat ROI2;
if (rects.size() == 0)
{
cout << “截取的矩形框个数为0!“ << endl;
return -100;
}
double min = 1;//最大为1
for (int i = 0; i < rects.size() - 1; i++)
{
Rect rect1 = rects[i];
for (int j = i + 1; j < rects.size(); j++)
{
Rect rect2 = rects[j];
ROI1 = ROI(rect1);
ROI2 = ROI(rect2);
//double value = getSimilarity(ROI1 ROI2);
double value = getSimilarityByCos(ROI1 ROI2);
//cout << “value=“ << value< if (value>0 && value < min)
min = value;
}
}
return min;
}
String BlackScreenDetect::detection()
{
Mat img = imread(this->filePath);
//从左上角截取提出小图标区域
Rect rect(0 0 cvFloor(img.cols*(0.6)) cvFloor(img.rows*(0.6)));
Mat ROI = img(rect);
//获取到多个小块第二个参数为ROI数量
vector rects = excuteROIs(ROI10);
if (rects.size()==0)
{
return“随机产生矩形失败,请调整参数!“;
}
imshow(“ROI“ ROI);
//获取最小相似度值
double minValue =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-11 11:21 BlackScreenDetect\
目录 0 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\
文件 15335424 2019-03-11 11:21 BlackScreenDetect\BlackScreenDetect.sdf
文件 1351 2019-03-08 10:30 BlackScreenDetect\BlackScreenDetect.sln
文件 24576 2019-03-11 11:21 BlackScreenDetect\BlackScreenDetect.v12.suo
文件 4778 2019-03-11 11:12 BlackScreenDetect\BlackScreenDetect\BlackScreenDetect.cpp
文件 1221 2019-03-11 09:59 BlackScreenDetect\BlackScreenDetect\BlackScreenDetect.h
文件 6035 2019-03-08 16:24 BlackScreenDetect\BlackScreenDetect\BlackScreenDetect.vcxproj
文件 1176 2019-03-08 16:24 BlackScreenDetect\BlackScreenDetect\BlackScreenDetect.vcxproj.filters
文件 6066 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\main.cpp
目录 0 2019-03-08 10:30 BlackScreenDetect\BlackScreenDetect\x64\
目录 0 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\
目录 0 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\
文件 161 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\BlackScreenDetect.lastbuildstate
文件 1138 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\cl.command.1.tlog
文件 44052 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\CL.read.1.tlog
文件 1946 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\CL.write.1.tlog
文件 1444 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\li
文件 3072 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\li
文件 678 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\li
文件 1072 2019-03-11 11:07 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScreenDetect.Build.CppClean.log
文件 2180 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScreenDetect.log
文件 521541 2019-03-11 11:12 BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScreenDetect.obj
文件 231489 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\main.obj
文件 707584 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\vc120.idb
文件 978944 2019-03-11 11:19 BlackScreenDetect\BlackScreenDetect\x64\Debug\vc120.pdb
目录 0 2019-03-08 10:30 BlackScreenDetect\x64\
目录 0 2019-03-11 11:07 BlackScreenDetect\x64\Debug\
文件 126976 2019-03-11 11:19 BlackScreenDetect\x64\Debug\BlackScreenDetect.exe
文件 1742128 2019-03-11 11:19 BlackScreenDetect\x64\Debug\BlackScreenDetect.ilk
文件 1813504 2019-03-11 11:19 BlackScreenDetect\x64\Debug\BlackScreenDetect.pdb
............此处省略0个文件信息
- 上一篇:《第一财经》的播放器源码
- 下一篇:基于socket的即时通信
相关资源
-
ob
jectARX自定义实体简单 - bacnet开发相关资料
- Wallis滤波
- 基于STM32示波器 DDS信号发生器.zip
- 多态与虚拟多型與虛擬
- 基于Qt实现的猜数字游戏
- http 服务器
- WS2812库 arduino测试通过
- Qt实现notepad记事本源码工程(版本二
- Qt+GDAL图像显示基本功能
- 计算机联锁进路搜索算法
- Qt贪吃蛇小游戏代码+详细设计文档
- 由三点三维坐标计算圆半径和圆心位
- VC全景图拼接算法源码毕业设计+论文
- 设计一个菜单驱动的学生成绩管理程
- 基于opencv实现的图像拼接
- 测量平差程序设计—宋力杰
- HDF5 HDF4 NC 格式数据解析操作类
- 通信录管理系统(用数据库连接,包
- QT5各类控件合集包好常用(QML)
- ROI区域&图像混合例程by浅墨
- ASM 人脸特征点提取
- perl2exe 破解版,可编译生成exe文件
- AIX 5.3安装文档
- 超市信息管理系统课程设计.docx
- 数据结构 刘大有 代码
- 实现快速排序
- 判断一个有向图中是否存在回路,并
- opencv识别单行数字
- 本科课设——电力系统潮流计算
评论
共有 条评论