日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杂项代码未分类

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杂项代码未分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/** * @file miscellaneous.hpp * @author 鬧鬧 * @brief 雜項內容,不歸類 * @details 為天地立心,為生民立命,為往圣繼絕學,為萬世開太平。 * @version 1.0.0.1 * @date 2022年6月29日09:28:08 * @copyright Copyright (c) 2050 * ********************************************************************************** * @par 修改日志: * <table> * <tr><th>Date <th>Version <th>Author <th>Description * <tr><td> <td>1.0.0.2 <td>naonao <td> * </table> * *********************************************************************************** * @par 修改日志: * <table> * <tr><th>Date <th>Version <th>Author <th>Description * <tr><td>2021年1月11日15:27:52<td>1.0.0.3 <td>naonao <td> * </table> * *********************************************************************************** * @par 修改日志: * <table> * <tr><th>Date <th>Version <th>Author <th>Description * <tr><td> <td>1.0.0.4 <td>naonao <td> * </table> * ***/ #pragma once #ifndef __MISCELLANEOUS_H__ #define __MISCELLANEOUS_H__#ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif //標準庫 #include <time.h> #include <iostream> #include <map> //第三方庫 #include "opencv2/opencv.hpp" #define CV_VERSION_ID CVAUX_STR(CV_MAJOR_VERSION) \CVAUX_STR(CV_MINOR_VERSION) \CVAUX_STR(CV_SUBMINOR_VERSION) #ifdef _DEBUG #define cvLIB(name) "opencv_" name CV_VERSION_ID "d" #else #define cvLIB(name) "opencv_" name CV_VERSION_ID #endif //鏈接庫 //#pragma comment( lib, cvLIB("img_hash") ) #pragma comment( lib, cvLIB("world") ) namespace nao {namespace algorithm{/*** @brief gamma變換* @param img * @param gamma * @param n_c * @return */cv::Mat gamma_trans(const cv::Mat& img, double gamma, int n_c = 1) {cv::Mat img_gamma(img.size(), CV_32FC1);for (int i = 0; i < img.rows; i++) {for (int j = 0; j < img.cols; j++) {img_gamma.at<float>(i, j) = n_c * pow(img.at<uchar>(i, j), gamma);}}cv::normalize(img_gamma, img_gamma, 0, 255, cv::NormTypes::NORM_MINMAX);cv::convertScaleAbs(img_gamma, img_gamma); //將CV_32F的圖像轉成CV_8U的return img_gamma;}/*** @brief* @param img* @param sin 黑場閾值* @param hin 白場閾值* @param mt 灰度調節* @param sout 輸出黑場閾值* @param hout 輸出白場閾值* @return* @see https://blog.csdn.net/youcans/article/details/125373625*/cv::Mat gray_stairs(const cv::Mat& img, double sin = 0.0, double hin = 255.0, double mt = 1.0, double sout = 0.0, double hout = 255.0) {double Sin = std::min(std::max(sin, 0.0), hin - 2); //Sin, 黑場閾值, 0 <= Sin < Hindouble Hin = std::min(hin, 255.0); //Hin, 白場閾值, Sin<Hin<=255double Mt = std::min(std::max(mt, 0.01), 9.99); // Mt, 灰場調節值, 0.01~9.99double Sout = std::min(std::max(sout, 0.0), hout - 2); // Sout, 輸出黑場閾值, 0<=Sout<Houtdouble Hout = std::min(hout, 255.0); //Hout, 輸出白場閾值, Sout<Hout<=255double difin = Hin - Sin;double difout = Hout - Sout;uchar lutData[256];for (int i = 0; i < 256; i++) {double v1 = std::min(std::max(255 * (i - Sin) / difin, 0.0), 255.0); //輸入動態線性拉伸double v2 = 255 * std::pow(v1 / 255.0, 1.0 / Mt); //灰場伽馬調節lutData[i] = (int)std::min(std::max(Sout + difout * v2 / 255, 0.0), 255.0); //# 輸出線性拉伸}cv::Mat lut(1, 256, CV_8UC1, lutData);cv::Mat dst;cv::LUT(img, lut, dst);return dst;}/*** @brief 形態學處理種類* * @details */enum class PhologyType{FS = 1, ///<只有當卷積核對應的元素全為1時,其值才為1,否則均為0。PZ = 2, ///<當卷積核對應的元素只要有一個為1時,其值便為1,否則為0。K = 3, ///<對腐蝕后的圖像,進行膨脹處理,可以去除噪聲,并保持原有形狀。B = 4, ///<閉運算是先膨脹,后腐蝕,它有助于關閉前景物體內部的小孔,或物體上的小黑點。TD = 5, ///<梯度運算即為膨脹圖像減去腐蝕圖像從而得到輪廓圖像。DM = 6, ///<禮帽運算即為原始圖像減去開運算的圖像,得到其中的噪聲圖像HM = 7 ///<黑帽運算即為閉運算圖像減去原始圖像,得到圖片內部的小孔,或前景色中的小黑點}; // enum type/*** @brief 形態學核的種類* * @details */enum KernelShape{JUXING = cv::MorphShapes::MORPH_RECT,SHIZI = cv::MorphShapes::MORPH_CROSS,TUOYUAN = cv::MorphShapes::MORPH_ELLIPSE}; // enum shape/*** @brief 形態學運算* @param src 原圖* @param size 大小* @param type 種類* @param shape 默認矩形* @return cv:: Mat** @details*/cv:: Mat morphology(const cv::Mat src, cv::Size size, PhologyType type, KernelShape shape = KernelShape::JUXING){cv:: Mat element = cv:: getStructuringElement(shape, size);cv:: Mat dst;switch (type){case PhologyType::FS :cv:: erode(src, dst, element);break;case PhologyType::PZ :cv:: dilate(src, dst, element);break;case PhologyType::K :cv:: morphologyEx(src, dst, cv::MORPH_OPEN, element);break;case PhologyType::B :cv:: morphologyEx(src, dst, cv::MORPH_CLOSE, element);break;case PhologyType::TD :cv:: morphologyEx(src, dst, cv::MORPH_GRADIENT, element);break;case PhologyType::DM :cv:: morphologyEx(src, dst, cv::MORPH_TOPHAT, element);break;case PhologyType::HM :cv:: morphologyEx(src, dst, cv::MORPH_BLACKHAT, element);break;default: break;}return dst;}void get_rect_img(const cv::Mat& img, std::vector<cv::Point2i>& vecPt, cv::Mat& grayimg) {if (vecPt.size()<3) {grayimg = img.clone();return;}//構建凸包std::vector<cv::Point2i> hull;cv::convexHull(vecPt, hull);//構建maskcv::Mat mask = cv::Mat::zeros(cv::Size(img.cols, img.rows), img.type());std::vector<std::vector<cv::Point2i>> contour;contour.emplace_back(hull);cv::drawContours(mask, contour, 0, cv::Scalar(255, 255, 255), cv::FILLED);//輸出cv::Mat ret;img.copyTo(ret, mask);grayimg = ret.clone();}}//namespace algorithm }// namespace nao #endif //__MISCELLANEOUS_H__ /*----------------------------------------------------------------------------- (C) COPYRIGHT LEI *****END OF FILE------------------------------------------------------------------------------*/

總結

以上是生活随笔為你收集整理的杂项代码未分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。