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

青县网站建设价格做网站代理去拉人

青县网站建设价格,做网站代理去拉人,高端网站建设方案报价,临沂网站建设公司文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的#xff0c;并没有直接调用相关的库完整的代码——调用ope… 文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的并没有直接调用相关的库完整的代码——调用opencv的特定的库实现的实现过程参考实现思路 使用C进行实现开发平台是clion并没有使用深度学习使用opencv进行开发 配置opencv 一开始就出来幺蛾子之前装好的opencv怎么都找不到包弄了一个小时夹着红框后面的三句告诉clion我安装的opencv包的具体位置可能是因为我之前没有编译成功直接间别人编译好的直接下载下来的不过我为什么不用python上面的opencv那。 位置剪裁 相机位置固定拍摄的位置固定背景干扰很少只需要保存红框右半部分的内容即可左半部分去除。 实现代码 #include opencv2/opencv.hpp #include opencv2/highgui/highgui.hpp #include opencv2/core/core.hpp #include iostream #include fstreamusing namespace std; using namespace cv;struct RectPoint{int x,y;int width,height;RectPoint(int x,int y,int width,int height):x(x),y(y),width(width),height(height){} };void ClipImage(String ImagePath,RectPoint rect,String TargetPath){// 声明Mat保存图片Mat img;Rect m_select;string line;// 判定文件存在ifstream input_file(ImagePath);if (!input_file.is_open()) {cerr Could not open the file - ImagePath endl;return;}while(getline(input_file,line)){// 获取文件后缀名并进行拼接成目标文件名string ImageName line.substr(line.find_last_of(\\,line.size())1);string TargetName TargetPath;TargetName.append(ImageName);// 读取并剪裁图片到特定大小保存img imread(line);m_select Rect(rect.x,rect.y,rect.width,rect.height);Mat ROI img(m_select);imwrite(TargetName,ROI);} }int main() {String TargetImage R(E:\CProject\impurityDetection\ClippedImage\);String SourceImage R(E:\CProject\impurityDetection\image\path.txt);ClipImage(SourceImage,RectPoint(600,0,1780,1480),TargetImage);return 0; } 自适应中值滤波 自适应中值滤波是为了去除照相机的噪声同时又不损坏原来的杂质信息这里使用自适应中值滤波具体实现如下。 实现代码 void Convolution(Mat SourceImage,vectorint pixels,int x,int y ,int border){for (int k -border; k border; k){for (int l -border; l border; l){pixels.push_back(SourceImage.atuchar(xk, yl));}} }Mat SelfAdaptMedianFilter(const Mat SourceImage){// 复制原图Mat result SourceImage.clone();// 掩膜大小为3int ksize 3;int border ksize /2 ;for (int i border; i SourceImage.rows - border; i){for (int j border; j SourceImage.cols - border; j){while(1){// 提取当前像素的邻域vectorint pixels;Convolution(result, pixels, i, j, border);// 对邻域像素值进行排序sort(pixels.begin(), pixels.end());// 取中值作为当前像素的新值int median pixels[pixels.size() / 2];int PMax pixels[pixels.size() - 1];int PMin pixels[0];//判定是否为异常值if (median PMax || median PMin) {// 掩膜再加2重新计算ksize 2;if (ksize 2 Nmax) {result.atuchar(i, j) median;break;}else{// 判定传入的值是否出现越界的情况if((i - ksize / 2 0 || i ksize / 2 SourceImage.cols) ||j - ksize / 2 0 || j ksize / 2 SourceImage.rows)result.atuchar(i,j) (PMax PMin) / 2;}} else {//中值不是极值判定原像素点是不是极值然后在进行输出if (result.atuchar(i, j) PMax || result.atuchar(i, j) PMin)result.atuchar(i,j) median;break;}}}}return result; } 动态范围增强 这里就是图像的直方图均衡化使得整个模型的图片颜色对比度更大显示出更多的细节。 实现代码 //对图片进行直方图均衡化凸显出前后差异Mat equalized;// 转成二值化并变为直方图均衡化cvtColor(ROI, equalized, COLOR_BGR2GRAY);equalizeHist(equalized, equalized);形态学处理 膨胀操作 通过增加图像中的物体的像素数量使得物体的大小和面积增加边缘变得更加明显改变了原来字体粗细 腐蚀操作 在卷积核大小中对图片进行卷积。取图像中3 * 3区域内的最小值。可以消除图像中的毛刺和噪声。改变了原来字体粗细 开运算 先腐蚀运算在进行膨胀运算。在不损害字体信息的情况下去除了噪声和毛刺。通过调整卷积可以进一步减少噪声 闭运算 先膨胀运算在进行腐蚀运算。在不去除任何噪声的情况下补全了缺失的信息。 这里选择开运算具体实现代码如下别的可以参考知乎链接 实现代码 // 对图像进行开运算Mat morphologied;int size 3;// shape是内核的形状size是内核的尺寸锚点的位置对于矩形来说全部都是 1 不用调整cv::Mat element cv::getStructuringElement(cv::MORPH_RECT,cv::Size(2*size 1, 2*size1),cv::Point(size, size));coutelementendl;morphologyEx(equalized, morphologied, cv::MORPH_OPEN, element);图片预处理效果 计算帧差 主要有两种方法分别是静态参考帧差分法和连续帧帧差法下图为两个效果很明显的可以就看到连续帧帧差法的效果更好常见的静态帧是将多个帧进行平均然后以平均之后的帧作为参考帧然后后面每帧都是和当前帧作比较没有动作的连续性。 连续帧帧差法原理和实现代码 实现原理如下图 使用absdiff函数具体描述如下计算frame1和frame2的帧差然后将结果保存到framediff中 cv::Mat frameDiff; cv::absdiff(frame1, frame2, frameDiff);实现代码 //计算帧差并将最终的结果进行返回 Mat DifFrame(Mat PreFrame,Mat CurFrame,Mat NextFrame){//计算帧差Mat FrameDiffPre , FrameDiffNext;absdiff(PreFrame,CurFrame,FrameDiffPre);absdiff(CurFrame,NextFrame,FrameDiffNext);// 分别进行二值化设定二值化的阈值Mat BinImgPre , BinImgNext;threshold(FrameDiffPre,BinImgPre,128,255,cv::THRESH_BINARY);threshold(FrameDiffNext,BinImgPre,128,255,cv::THRESH_BINARY);// 将图片进行与运算然后将结果进行输出Mat ResFrame;bitwise_and(FrameDiffPre,FrameDiffNext,ResFrame);//返回最终处理过后的帧return ResFrame;}// 计算帧差的外部函数读取原来处理过的文件计算所有图片的帧差 void AllDifFrame(const string ImagePath,const string TargetPath){// 保存文件名string line;// 判定文件存在ifstream input_file(ImagePath);if (!input_file.is_open()) {cerr Could not open the file - ImagePath endl;return;}// 需要提前读取两个然后依次往后进行迭代Mat PreFrame,CurFrame,NextFrame;getline(input_file,line);PreFrame imread(line);// 读取下一个需要处理的帧getline(input_file,line);CurFrame imread(line);// 逐行读取文件名while(getline(input_file,line)){// 当前需要处理的帧NextFrame imread(line);// 获取文件后缀名并进行拼接成目标文件名string ImageName line.substr(line.find_last_of(\\,line.size())1);string TargetName TargetPath;TargetName.append(ImageName);// 三帧相邻出进行帧差运算算出的帧差进行按位相与运算Mat TempFrame;absdiff(PreFrame,CurFrame,PreFrame);absdiff(CurFrame,NextFrame,TempFrame);bitwise_and(PreFrame,TempFrame,TempFrame);//计算计算过进行保存imwrite(TargetName,TempFrame);// 三帧往前进行迭代PreFrame CurFrame;CurFrame NextFrame;}}K近邻实现 基本介绍 思路 将样本在特征空间中根据一定的分类方法归类于与该样本最相似的K个样本中大多数的那一类。需要一部分已经标注过的样本然后将未标注过的样本进行分类。 特点 对于异常目标的容忍度比较高因为不依靠参数直接分类而是寻找多个近邻目标的联合分类支持多分类对于类域交叉重叠依然有较好的分类能力因为白酒中的杂质在特征上有很强的相似性在类域上会有很强的重叠性训练过程复杂度低实时更新样本数据集再识别一种杂质之后将该样本增加到样本数据中使得分类效果更加稳定。 实现过程 准备数据集需要将要分类的目标的特征向量与一些已知分类的目标的特征向量组成一个数据集。特征提取使用OpenCV库提取目标的特征向量。 注意 这里提取的特征是完整的一幅图片因为我这里已经对图片进行了预处理让特征很明显所以不需要进行特征提取 训练模型使用KNN算法对数据集进行训练生成分类器。分类使用训练好的分类器对新的目标进行分类。 补充 针对图片进行的KNN分类是一种高维数据KNN算法可以使用降维技术来提高效率和准确率比如说主成分分析PCAKNN适用于小数据集和低维度数据集可以通过对距离加权的方式来提升预测的准确率 实现代码 这部分是手动实现的并没有直接调用相关的库 // 定义一个结构体用于保存数据点和标签 struct DataPoint {vectordouble features; // 特征数据int label; // 标签 };// 计算欧氏距离 double euclideanDistance(const vectordouble v1, const vectordouble v2) {double dist 0.0;for (int i 0; i v1.size(); i) {dist pow((v1[i] - v2[i]), 2);}return sqrt(dist); }// 预测函数返回预测标签 int predict(const vectorDataPoint trainData, const vectordouble testData, const int k) {// 对于测试集计算每一个测试样本和数据集中的所有样本的欧式距离vectorpairint, double distances; // 存储距离和标签for (const auto i : trainData) {double distance euclideanDistance(i.features, testData);distances.emplace_back(i.label, distance);}// 根据结果进行排序,指定排序函数仅仅对距离进行比较sort(distances.begin(), distances.end(), [](pairint, double a, pairint, double b) {return a.second b.second;});// 获取最后k个样本最高的分类类别vectorint kLabels(k);for (int i 0; i k; i) {kLabels.push_back(distances[i].first);}// 获取数量类别最大的分类int maxLabel 0;int maxCount 0;for (auto iter kLabels.begin();iter ! kLabels.end();iter ){int times count(kLabels.begin(),kLabels.end(),*(iter));if(times maxCount){maxCount times;maxLabel *(iter);}}return maxLabel;} 完整的代码——调用opencv的特定的库实现的 #includeopencv2/opencv.hpp #includeiostream #include fstreamusing namespace std; using namespace cv; using namespace cv::ml;// 读取图片并形成数据集 void KNNTraning(const string ImagePath, Mat Images, Mat Labels) {/** 将图片转成一维数据并保存在MAT中* path: 读取文件需要使用的路径* images保存所有图片的数据集* labels对应每一张图片的标签*/// 声明Mat保存图片Mat img;string line;string ImgLabel;int flag 0;// 判定文件存在ifstream input_file(ImagePath);if (!input_file.is_open()) {cerr Could not open the file - ImagePath endl;return;}while(getline(input_file,line)) {// 获取文件后缀名并进行拼接成目标文件名string ImageName line.substr(line.find_last_of(\\,line.size())1);if(ImageName ! ImgLabel)flag ;// 将图片转成一维的数据并合并到一个大的mat中img imread(line, cv::IMREAD_GRAYSCALE);Images.push_back(img.reshape(0,1));Labels.push_back(flag);}// 将Mat转变成数据集Images.convertTo(Images,CV_32F);Images Images / 255;int nImgCount Images.rows;int nTrainCount nImgCount / 4 * 3;Mat trainData,trainLabels;trainData Images(Range(0,nTrainCount),Range::all());trainLabels Labels(Range(0,nTrainCount),Range::all());PtrTrainData tData TrainData::create(trainData, ROW_SAMPLE, trainLabels);// 训练KNN模型PtrKNearest model KNearest::create();// 设定k值,最终选取是哪个类别model-setDefaultK(5);// 设置分类还是回归true为分类false为回归model-setIsClassifier(true);// 设置训练数据进行训练。就相当于将前面的标注数据和测试数据进行了一个训练绑定model-train(tData);model-save(model.xml); }float predict(string ImgPath,string modelPath){// 加载模型cv::Ptrcv::ml::KNearest knn cv::ml::StatModel::loadcv::ml::KNearest(modelPath);//读取图片Mat imgTest imread(ImgPath);imgTest.convertTo(imgTest,CV_32F);imgTest imgTest / 255;imgTest imgTest.reshape(0,1);//输出预测结果float ret knn-predict(imgTest);return ret; }实现过程 参考 Opencv 图像处理之膨胀与腐蚀 【https://zhuanlan.zhihu.com/p/110330329】
http://www.hkea.cn/news/14433116/

相关文章:

  • 发布公司信息的网站手机做网站软件
  • 綦江网站建设简约wordpress主题
  • 中小型企业建设网站网页设计案例
  • 四川简阳建设局招标公告网站wordpress转移
  • wordpress无法开始安装柳州网站建设优化推广
  • 推广优化公司网站关键词搜索名词解释
  • 怎么学习企业网站维护千锋教育西安校区
  • 网站栏目结构设计做软件下载网站
  • 陕西建站公司iis做网站的流程
  • 孟州网站建设wordpress预约插件
  • 网站最下端怎么做phpwind与wordpress
  • 做淘宝网站怎么弄电商app开发费用
  • 网站icp备案需要多久wordpress问题插件
  • 网站有哪几种类型4399网页版入口
  • 漳州招商局规划建设局网站wordpress版权文件
  • 医院网站建设情况说明书wordpress必备
  • 哈尔滨快速建站合作在建项目查询在哪里查
  • 佛山大良网站建设部队网站建设方案
  • 东莞品牌网站建设晋城推广型网站建设
  • 建设网站二级建造师如何解聘购房者网站
  • 深圳动力网站设计公司网络管理系统登录
  • 西安知名网站推广wordpress 全局广告
  • 网站推广到海外怎么做免费不需要vip的追剧软件
  • 安徽常青建设集团网站厦门网站开发比较大的公司
  • 中山企业网站优化郑州一建南阳分公司
  • win8 metro风格网站后台管理模板河南省建设监理协会网站证书查询
  • seo资料站google站长工具
  • 一般用什么做网站首页马尾网站建设
  • 为什么上不了建设银行个人网站网站建设费财务列账
  • 网站建设注意事情大气有内涵的公司名字