資源簡介
算法思想:隨機在給定的圖像中產(chǎn)生多個矩形區(qū)域,比較矩形區(qū)域內(nèi)圖像相似度,相似度高,則表明黑屏,否則就正常。
PS:相似度用到了余弦值。

代碼片段和文件信息
#include?????
#include???
#include?“BlackScreenDetect.h“?
using?namespace?std;
using?namespace?cv;
//構(gòu)造函數(shù)
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;
}
//隨機產(chǎn)生矩形框
vectorBlackScreenDetect::excuteROIs(Mat?ROIint?ROI_number)
{
//聲明一個空的vector
vector?rects;
Rect?rect;
//產(chǎn)生隨機數(shù)
//RNG?rng;?
srand(time(NULL));?/*初始化隨機數(shù)種子*/??????//?a?=?rand()?%?(d?-?t)?+?t;?/*生成一個[td)區(qū)間內(nèi)的整數(shù)*/
int?width?=?100;//要設(shè)定的框的寬度
int?height?=?100;//要設(shè)定的框的高度
int?x;
int?y;
int?times?=?0;
while?(true)
{
times++;
//x?=?rng.uniform(0?ROI.cols);
x?=?rand()?%?(ROI.cols);?/*生成一個[td)區(qū)間內(nèi)的整數(shù)*/
//?y?=?rng.uniform(0?ROI.rows);
y?=?rand()?%?(ROI.rows);?/*生成一個[td)區(qū)間內(nèi)的整數(shù)*/
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? {
Rect?temp?=?rects[i];
//判斷當(dāng)前矩形是否和vector中的相交
flag?=?isOverlap(rect?temp);
if?(flag?==?true)//有相交
{
break;//跳出遍歷
}
}
//沒有相交
if?(flag?==?false)
{
//沒有相交,就添加
rects.push_back(rect);
//添加完判斷下大小
if?(rects.size()?==?ROI_number)//要截取的矩形框個數(shù)
break;//跳出while循環(huán)
}
}
}
//控制不進入無限循環(huán)
if?(times>1000000)
{
rects.clear();
return?rects;
}
}
cout?<“循環(huán)次數(shù)=“<
//畫出矩形框
for?(int?i?=?0;?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?<“截取的矩形框個數(shù)為0!“?< return?-100;
}
double?min?=?1;//最大為1
for?(int?i?=?0;?i? {
Rect?rect1?=?rects[i];
for?(int?j?=?i?+?1;?j? {
Rect?rect2?=?rects[j];
ROI1?=?ROI(rect1);
ROI2?=?ROI(rect2);
//double?value?=?getSimilarity(ROI1?ROI2);
double?value?=?getSimilarityByCos(ROI1?ROI2);
//cout?<“value=“?< if?(value>0?&&?value? min?=?value;
}
}
return?min;
}
String?BlackScreenDetect::detection()
{
Mat?img?=?imread(this->filePath);
//從左上角截取提出小圖標區(qū)域
Rect?rect(0?0?cvFloor(img.cols*(0.6))?cvFloor(img.rows*(0.6)));
Mat?ROI?=?img(rect);
//獲取到多個小塊第二個參數(shù)為ROI數(shù)量
vector?rects?=?excuteROIs(ROI10);
if?(rects.size()==0)
{
return“隨機產(chǎn)生矩形失敗,請調(diào)整參數(shù)!“;
}
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個文件信息
- 上一篇:《第一財經(jīng)》的播放器源碼
- 下一篇:基于socket的即時通信
評論
共有 條評論