• 大小: 5.81MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-18
  • 语言: 其他
  • 标签: C++  黑屏检测  

资源简介

算法思想:随机在给定的图像中产生多个矩形区域,比较矩形区域内图像相似度,相似度高,则表明黑屏,否则就正常。 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\link.command.1.tlog
     文件        3072  2019-03-11 11:19  BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\link.read.1.tlog
     文件         678  2019-03-11 11:19  BlackScreenDetect\BlackScreenDetect\x64\Debug\BlackScr.E17D35CA.tlog\link.write.1.tlog
     文件        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个文件信息

评论

共有 条评论