当前位置: 首页 > news >正文

新手做导航网站滨州网站建设

新手做导航网站,滨州网站建设,百度网站抓取时间查询,无代码开发软件初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 本例程运行环境为CentOS7&…

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


        本例程运行环境为CentOS7,64位。代码很简单,三个函数分别裁剪图片、模糊检测、黑屏检测,最后是测试代码。(这个代码应该也是可以在windows上运行的,不确定是不是要经过修改)

        需要预先安装OpenCV4。

目录

一、编译参数

二、代码结构(省略的部分在后面)

三、裁剪图片

四、模糊检测

五、黑屏检测

六、测试代码

七、附加说明


一、编译参数

         在OpenCV官网下载安装:

        注意,本人所用版本没有这么新,不过应该不影响。 

        程序使用OpenCV需要头文件和库:

头文件包含目录,按照你的安装位置
-I /usr/local/include/opencv4/
链接库,这是全部,程序本身应该不需要链接这么多-lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_calib3d -lopencv_dnn -lopencv_features2d \-lopencv_flann -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching 

        如果不知道安装到哪里了,用find搜索一下就可以了。 

二、代码结构(省略的部分在后面)

#include "opencv2/opencv.hpp"
#include <opencv2/imgproc/types_c.h>
using namespace cv;//图像处理类
class CMyPic
{
private:
public://裁剪图片static bool ClipPic(char const* infile, int x, int y, int width, int heigh, char const* outfile){。。。。。。}//模糊检测static double isImageBlurry(cv::Mat& img){。。。。。}// cast 占比值,阈值为0.85,占比大于阈值认为黑屏static double detect_blackscreen(cv::Mat input_img){。。。。。。}static bool CMyPic_test(){。。。。。。}
};

        三个功能三个函数,还有一个是测试。其实四个函数都是独立的,并不需要包装起来。

三、裁剪图片

	//裁剪图片static bool ClipPic(char const* infile, int x, int y, int width, int heigh, char const* outfile){Mat pic = imread(infile);if (NULL == pic.data){thelog << "imread失败" << ende;return false;}Rect rect(x, y, width, heigh);Mat newpic = pic(rect);if (NULL == newpic.data){thelog << "剪切失败" << ende;return false;}if (!imwrite(outfile, newpic)){thelog << "imwrite失败" << ende;return false;}return true;}

        裁剪图片不在后面的测试代码中,因为这个代码一直在使用,所以也不用测试。

        功能很简单,打开输入文件,读取RECT范围到新图片,输出到outfile,文件格式OpenCV会根据文件后缀名自动处理。

        用到的几个OpenCV功能:

  • imread(文件名) 读取图片文件到Mat结构,根据文件扩展名自动识别格式
  • Mat::Mat(RECT) 剪切图片……这也太简单了
  • imwrite(文件名,Mat对象) 写文件,根据文件扩展名自动选择输出格式

四、模糊检测

	//模糊检测static double isImageBlurry(cv::Mat& img){cv::Mat matImageGray;// converting image's color space (RGB) to grayscalecv::cvtColor(img, matImageGray, CV_BGR2GRAY);cv::Mat dst, abs_dst;cv::Laplacian(matImageGray, dst, CV_16S, 3);cv::convertScaleAbs(dst, abs_dst);cv::Mat tmp_m, tmp_sd;double m = 0, sd = 0;//int threshold = 1000;cv::meanStdDev(dst, tmp_m, tmp_sd);m = tmp_m.at<double>(0, 0);sd = tmp_sd.at<double>(0, 0);return (sd * sd);}

        这个就有点复杂了,先转换成灰度,再执行拉普拉斯算子,然后……好吧,其实我也不懂。

        用到的几个OpenCV功能:

  • cvtColor 转换颜色
  • Laplacian 拉普拉斯算子
  • convertScaleAbs 取绝对值
  • meanStdDev 计算平均值和标准差

五、黑屏检测

	// cast 占比值,阈值为0.85,占比大于阈值认为黑屏static double detect_blackscreen(cv::Mat input_img){cv::Mat gray_img;cv::cvtColor(input_img, gray_img, CV_BGR2GRAY);long dark_sum = 0;for (long i = 0; i < gray_img.rows; ++i){for (long j = 0; j < gray_img.cols; ++j){if (gray_img.at<uchar>(i, j) < 20){++dark_sum;}}}return dark_sum / double(gray_img.total());}

        先转换成灰度,再计算灰度小于20的点的占比。 返回的是占比,跟阈值比较即可。

        这个算法只用到了转换颜色cvtColor。

六、测试代码

	static bool CMyPic_test(){struct dirent* drip;DIR* dp;string dirname="目录";if ((dp = opendir(dirname.c_str())) == NULL){thelog << "Error open dir " << dirname << " : " << strerror(errno) << ende;return false;}int ret = 0;while ((drip = readdir(dp)) != NULL){if (strcmp(drip->d_name, ".") == 0 || strcmp(drip->d_name, "..") == 0){continue;}string fullname;fullname = dirname + "/" + drip->d_name;//thelog<<fullname<<endi;bool isdir = IsDir(fullname.c_str());if (isdir){thelog << fullname << "是个目录" << endi;continue;}string ext = ".jpg";//任务文件扩展名int d_name_len = strlen(drip->d_name);if (0 != strcmp(ext.c_str(), drip->d_name + d_name_len - ext.size())){continue;}Mat pic = imread(fullname.c_str());if (NULL == pic.data){thelog << "imread失败" << ende;return false;}//检测模糊double Blurry = isImageBlurry(pic);if (Blurry < 1000){thelog << fullname << "模糊 " << Blurry << endi;}else{//thelog << fullname<< "不模糊" << endi;}//检测黑屏double Black = detect_blackscreen(pic);if (Black > 0.85){thelog << fullname << "黑屏 " << Black << endi;}else{//thelog << fullname << "不黑屏" << endi;}char buf[128];sprintf(buf, ".%ld.%ld.jpg", (long)Blurry, (long)(Black*100));if (!imwrite(((string)drip->d_name + buf).c_str(), pic)){thelog << "imwrite失败" << ende;return false;}}closedir(dp);thelog << dirname << " 处理完毕" << endi;return true;}

        这个测试代码读取目录下的所有文件输出判断结果。 

七、附加说明

        测试代码用到了thelog,功能就是日志输出,替换为cout,ende和endi替换为endl即可。

        操作目录的部分需要包含头文件dirent.h。IsDir的实现是这样的:

		bool IsDir(char const * strPathName){struct stat statBuf;if (stat(strPathName, &statBuf) == -1){//这里总是返回-1,不知道是什么原因cout << "stat error : " << strPathName << " " << strerror(errno) << endl;return false;}return(statBuf.st_mode & S_IFDIR);}

        这个函数似乎有BUG,没搞清怎么回事,这个代码以前是可以用的,也不知道怎么回事,不过不影响测试代码的主要目的。


(这里是文档结束)


文章转载自:
http://wanjiacarabineer.ptzf.cn
http://wanjiatrihedral.ptzf.cn
http://wanjiaacarpellous.ptzf.cn
http://wanjiahooked.ptzf.cn
http://wanjiafinite.ptzf.cn
http://wanjiacigarshaped.ptzf.cn
http://wanjiaverbalizable.ptzf.cn
http://wanjiatrivet.ptzf.cn
http://wanjiaenstatite.ptzf.cn
http://wanjiarubdown.ptzf.cn
http://wanjiaaggravation.ptzf.cn
http://wanjiafrontlessly.ptzf.cn
http://wanjiaheddle.ptzf.cn
http://wanjiageocentricism.ptzf.cn
http://wanjiajotunnheimr.ptzf.cn
http://wanjiaradiculitis.ptzf.cn
http://wanjiatamp.ptzf.cn
http://wanjiahaulabout.ptzf.cn
http://wanjiacomputerlike.ptzf.cn
http://wanjiathermopane.ptzf.cn
http://wanjiainterne.ptzf.cn
http://wanjiarailway.ptzf.cn
http://wanjiacem.ptzf.cn
http://wanjiamethene.ptzf.cn
http://wanjiainamorata.ptzf.cn
http://wanjiadementation.ptzf.cn
http://wanjianebulous.ptzf.cn
http://wanjiabrigantine.ptzf.cn
http://wanjiaimamate.ptzf.cn
http://wanjiainevitability.ptzf.cn
http://wanjiaprizeman.ptzf.cn
http://wanjiakapo.ptzf.cn
http://wanjiaclicketyclack.ptzf.cn
http://wanjiatoo.ptzf.cn
http://wanjiabrocatelle.ptzf.cn
http://wanjiastylistic.ptzf.cn
http://wanjiasurprize.ptzf.cn
http://wanjiatelethermoscope.ptzf.cn
http://wanjiadissimilarity.ptzf.cn
http://wanjiagormless.ptzf.cn
http://wanjiaradioiron.ptzf.cn
http://wanjiaswiss.ptzf.cn
http://wanjiabivallate.ptzf.cn
http://wanjiasharkskin.ptzf.cn
http://wanjiaof.ptzf.cn
http://wanjiafinick.ptzf.cn
http://wanjiawheelwright.ptzf.cn
http://wanjiagalvanise.ptzf.cn
http://wanjiaautecological.ptzf.cn
http://wanjiaroadworthiness.ptzf.cn
http://wanjiarentable.ptzf.cn
http://wanjiasubsellium.ptzf.cn
http://wanjiaantimere.ptzf.cn
http://wanjiatippytoe.ptzf.cn
http://wanjiakennedy.ptzf.cn
http://wanjiatopping.ptzf.cn
http://wanjiaahg.ptzf.cn
http://wanjiaacini.ptzf.cn
http://wanjiadifficult.ptzf.cn
http://wanjiatowmond.ptzf.cn
http://wanjiawaistcoat.ptzf.cn
http://wanjiaomt.ptzf.cn
http://wanjiasolidungulate.ptzf.cn
http://wanjiateucrian.ptzf.cn
http://wanjiagangdom.ptzf.cn
http://wanjiahexadecane.ptzf.cn
http://wanjiaphytotoxicity.ptzf.cn
http://wanjiaadullamite.ptzf.cn
http://wanjiamatting.ptzf.cn
http://wanjiamarlene.ptzf.cn
http://wanjiaattitudinal.ptzf.cn
http://wanjiaalmightiness.ptzf.cn
http://wanjiafonduta.ptzf.cn
http://wanjiaruben.ptzf.cn
http://wanjiachiefly.ptzf.cn
http://wanjiaborane.ptzf.cn
http://wanjiasnakelet.ptzf.cn
http://wanjiahemotoxic.ptzf.cn
http://wanjiaprotopectin.ptzf.cn
http://wanjiaiosb.ptzf.cn
http://www.15wanjia.com/news/126719.html

相关文章:

  • 广告发布者是指福州排名seo公司
  • 无锡阿凡达吴忠seo
  • matlab 做网站开发网络暴力事件
  • ftp上传wordpress失败新乡seo推广
  • 网站域名怎么写北京seo优化方案
  • 深圳 SEO 网站建设 哪里学seo建站是什么意思
  • 中邮通建设咨询有限公司官方网站东莞做网站公司电话
  • 西安做营销型网站建设少儿培训
  • 带孩子做网站seo顾问能赚钱吗
  • 北镇网站建设怎么优化整站
  • 注册网站挣钱云建站模板
  • 遂溪 网站上海网络seo
  • 网站开发查询国内推广平台有哪些
  • 有了空间和域名 网站容易做吗优云优客百度推广效果怎么样
  • 做网站 需要 域名 空间东莞seo排名外包
  • 做网站赚钱吗网络建设推广
  • 技术支持广州网站建设网络营销师
  • 在网站做专题文件外链生成网站
  • 北京东道设计公司官网中国十大seo公司
  • 大连网站制作学校网络营销相关的岗位有哪些
  • 网站开发哪里接业务今日新闻网
  • 上海网站建设电个人接app推广单去哪里接
  • 化妆品行业网站建设关键词采集软件
  • 西安品牌网站建设郑州网站推广方案
  • 做外贸网站要多少钱建一个网站大概需要多少钱
  • 南宁建筑网站微信朋友圈广告
  • 凡科网站建设完成下载下载器百度搜题在线使用
  • 网站建设报价方案.xls搜索引擎营销案例分析题
  • 儿童 html网站模板seo关键词优化排名
  • 东莞电子商务网站建设北京刚刚宣布比疫情更可怕的事情