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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV图像处理——深度学习样本制造

發布時間:2025/3/21 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV图像处理——深度学习样本制造 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在做深度學習相關的項目時,往往最麻煩的是樣本的收集,或者只有很少的一些樣本,訓練根本達不到想要的效果,很多網絡模型的配置文件里面都有樣本增強的定義,是對樣本做旋轉,變換之類的操作,但沒有給樣本加一些背景來制造增強樣本的數量。

一、樣本準備

1.我做一個發票檢測位置到識別里面文字的項目,但我手里并沒有多少張發票樣本,在網上也很難找到能用的樣本,我的應用場景是把發票放在桌面上拍照之后,檢測識別。所以我先去網上下一些木紋桌面的樣本,放在一個目錄,完成之后從0開始命名如下:
2.我自己手中有發票樣本也放在一個目錄,也從0開始命名如下:

二、代碼

1.代碼用到OpenCV的基本庫,讀寫文件就隨便寫了個循環讀寫,最好是改成boost庫來讀寫文件。
2.代碼的思想,大概是要的發票樣本按任意角度旋轉,再與背景圖像融合。
3.代碼:

bool ROI_AddImage(Mat &cv_back, Mat &cv_front, Mat &cv_dst) {Mat cv_mask = cv_front.clone();if (!cv_back.data){std::cout << "讀入圖片失敗" << std::endl;return false;}if (!cv_front.data){std::cout << "讀入圖片失敗" << std::endl;return false;}int w = (cv_back.cols - cv_front.cols) / 2;int h = (cv_back.rows - cv_front.rows) / 2;Mat imageROI = cv_back(Rect(w, h, cv_front.cols, cv_front.rows));Mat mask;cv::cvtColor(cv_mask, mask, COLOR_BGR2GRAY);cv_front.copyTo(imageROI, mask); cv_dst = cv_back.clone(); }int main() {string back = "C:/Users/matt/Desktop/8/";string front = "C:/Users/matt/Desktop/80/";string save = "C:/Users/matt/Desktop/data/";for (int i = 0; i < 20; i++){string back_name = back + to_string(i) + ".jpg";string front_name = front + to_string(i) + ".jpg";Mat back = imread(back_name);Mat cv_front = imread(front_name);for (int j = 0; j < 5; j++){Mat cv_back = back.clone();Mat cv_rotata;int a = rand() % 180;rotateImage2(cv_front, cv_rotata, a, 0);Mat cv_png;toPng(cv_rotata, cv_png, 0);if (cv_png.rows > cv_back.rows){resize(cv_back, cv_back, cv_png.size(), 0.0, 0.0, INTER_NEAREST);resize(cv_png, cv_png, Size(cv_png.cols / 1.2, cv_png.rows / 1.2));}if (cv_png.rows < cv_back.rows){resize(cv_png, cv_png, cv_back.size(), 0.0, 0.0, INTER_NEAREST);resize(cv_png, cv_png, Size(cv_png.cols / 1.2, cv_png.rows / 1.2));}Mat cv_dst;ROI_AddImage(cv_back, cv_png, cv_dst);string save_name = save + to_string(i) + to_string(j) + ".jpg";imwrite(save_name, cv_dst);}}waitKey(0);return 0; }void toPng(cv::Mat &src, cv::Mat &dst, int mark) {cv::Mat cv_input = src.clone();if (cv_input.channels() != 4){cv::cvtColor(cv_input, dst, CV_BGR2BGRA);}else{return;}for (int y = 0; y < dst.rows; ++y){for (int x = 0; x < dst.cols; ++x){cv::Vec4b & pixel = dst.at<cv::Vec4b>(y, x);if (pixel[0] == mark && pixel[1] == mark && pixel[2] == mark){pixel[3] = 0;}}} }int rotateImage(Mat &img, Mat & imgout, int degree, int border_value) {if (img.empty())return 1;degree = -degree;double angle = degree * CV_PI / 180.; // 弧度 double a = sin(angle), b = cos(angle);int width = img.cols;int height = img.rows;int width_rotate = int(width * fabs(b) + height * fabs(a));int height_rotate = int(height * fabs(b) + width * fabs(a));if (width_rotate <= 20 || height_rotate <= 20){width_rotate = 20;height_rotate = 20;}float map[6];Mat map_matrix = Mat(2, 3, CV_32F, map);// 旋轉中心CvPoint2D32f center = cvPoint2D32f(width / 2, height / 2);CvMat map_matrix2 = map_matrix;cv2DRotationMatrix(center, degree, 1.0, &map_matrix2);//計算二維旋轉的仿射變換矩陣map[2] += (width_rotate - width) / 2;map[5] += (height_rotate - height) / 2;int chnnel = img.channels();if (chnnel == 3)warpAffine(img, imgout, map_matrix, Size(width_rotate, height_rotate), 1, 0, Scalar(0, 0, 0));elsewarpAffine(img, imgout, map_matrix, Size(width_rotate, height_rotate), 1, 0, 255);return 0; }

4.可以自己設置融合多少次,運行之后的結果如下:

注:有興趣于圖像處理學習的可以加

總結

以上是生活随笔為你收集整理的OpenCV图像处理——深度学习样本制造的全部內容,希望文章能夠幫你解決所遇到的問題。

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