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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

智能人像自动抠图——C++ 实现LFM 模型推理

發(fā)布時(shí)間:2024/3/26 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能人像自动抠图——C++ 实现LFM 模型推理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

  • 關(guān)于摳圖,首先想到的是PS的摳圖,要美工手動(dòng)一點(diǎn)點(diǎn)的把細(xì)節(jié)摳出來(lái),摳圖的好壞取決一個(gè)美工對(duì)PS的熟悉程度,在人像摳圖方面,對(duì)頭發(fā)的處理更是耗時(shí)耗力的一件事,在拍證件照的照像館都有固定的綠幕來(lái)?yè)醯魪?fù)雜的背景,以免增加后期的工作量,那么有沒(méi)有一種完全自動(dòng)的摳圖辦法呢? [A Late Fusion CNN for Digital Matting] CVPR 2019 上的一編論文, 作者提出了全自動(dòng)摳圖這個(gè)算法,不需要綠幕,也不需要輸入trimap圖(有了解傳統(tǒng)摳圖算法的應(yīng)該知道這個(gè)圖是干嗎用的),背景圖也不需要。在只需要輸入一張?jiān)瓐D的情況下,就能很好的摳圖。我用Pytorch復(fù)現(xiàn)了他的這個(gè)算法,并且效果還不錯(cuò)。
  • 關(guān)于人像摳圖的應(yīng)用場(chǎng)景可謂無(wú)所不在,在影視剪輯、直播娛樂(lè)、線上教學(xué)、視頻會(huì)議等場(chǎng)景中都有人像分割的身影,它可以幫助用戶實(shí)時(shí)、精準(zhǔn)地將人物和背景精準(zhǔn)識(shí)別出來(lái),實(shí)現(xiàn)更精細(xì)化的人物美顏、背景虛化替換、彈幕穿人等,我那時(shí)想復(fù)現(xiàn)這編論文也是因?yàn)楣鞠胱鲎C件照相關(guān)的項(xiàng)目。
  • 我的編譯環(huán)境是Windows 10 64位,IDE是VS2019,配置了OpenCV 4.5,實(shí)現(xiàn)語(yǔ)言是C++,用OpenCV的dnn來(lái)進(jìn)行模型推理。
  • 模型演示

    1.實(shí)現(xiàn)代碼

    void LFMatting(const cv::Mat& cv_src,cv::Mat &cv_matting, cv::Mat& cv_dst, cv::dnn::Net& net, int target_w = 640, int target_h = 960); void imshow(std::string name, const cv::Mat& img) {cv::namedWindow(name, 0);int max_rows = 500;int max_cols = 600;if (img.rows >= img.cols && img.rows > max_rows) {cv::resizeWindow(name, cv::Size(img.cols * max_rows / img.rows, max_rows));}else if (img.cols >= img.rows && img.cols > max_cols){cv::resizeWindow(name, cv::Size(max_cols, img.rows * max_cols / img.cols));}cv::imshow(name, img); }void mergeImage(std::vector<cv::Mat>& src_vor, cv::Mat& cv_dst, int channel) {cv::Mat img_merge;cv::Size size(src_vor.at(0).cols * src_vor.size(), src_vor.at(0).rows);if (channel == 1){img_merge.create(size, CV_8UC1);}else if (channel == 3){img_merge.create(size, CV_8UC3);}for (int i = 0; i < src_vor.size(); i++){cv::Mat cv_temp = img_merge(cv::Rect(src_vor.at(i).cols * i, 0, src_vor.at(i).cols, src_vor.at(i).rows));src_vor.at(i).copyTo(cv_temp);}cv_dst = img_merge.clone(); }cv::Mat channelSwitching(const cv::Mat& cv_src) {cv::Mat three_channel = cv::Mat::zeros(cv_src.rows, cv_src.cols, CV_8UC3);std::vector<cv::Mat> channels;if (cv_src.channels() == 1){for (int i = 0; i < 3; i++){channels.push_back(cv_src);}merge(&channels[0], channels.size(), three_channel);}return three_channel; }int main(int argc, char* argv[]) {cv::dnn::Net net = cv::dnn::readNet("model/graph_final_960_640.pb", "model/graph_final_960_640.pbtxt");std::string path = "images";std::vector<std::string> filenames;cv::glob(path, filenames, false);for (auto v : filenames){cv::Mat cv_src = cv::imread(v,1);std::vector<cv::Mat> cv_dsts(3);cv::Mat cv_matting, cv_dst;cv_dsts[0] = cv_src.clone();LFMatting(cv_src,cv_matting, cv_dsts[2], net);cv_dsts[1] = channelSwitching(cv_matting);cv_dsts[1].convertTo(cv_dsts[1], CV_8UC3, 255);mergeImage(cv_dsts, cv_dst, 3);cv::imwrite("dst.jpg", cv_dst);//cv::waitKey();}return 0; }void LFMatting(const cv::Mat& cv_src,cv::Mat &cv_matting, cv::Mat& cv_dst, cv::dnn::Net& net, int target_w,int target_h) {cv::Size reso(target_h, target_w);cv::Mat blob = cv::dnn::blobFromImage(cv_src, 1.0, reso,cv::Scalar(127.156207, 115.917443, 106.031127), true, false);net.setInput(blob);std::vector<cv::Mat> outputs;std::vector<std::string> names = {"deFG_side_0_out/ResizeNearestNeighbor","deBG_side_0_out/ResizeNearestNeighbor","fusion_sigmoid_output/Sigmoid"};net.forward(outputs, names);auto t1 = cv::getTickCount();for (size_t i = 0; i < outputs.size(); ++i){outputs[i] = outputs[i].reshape(0, { outputs[i].size[2], outputs[i].size[3] });cv::resize(outputs[i], outputs[i], cv_src.size(), 0.0, 0.0, cv::INTER_LINEAR);}cv::Mat fg = outputs[0];cv::Mat bg = outputs[1];cv::Mat alpha = outputs[2];cv_matting = fg.mul(alpha) + (1.0 - bg).mul(1.0 - alpha);cv_dst = cv::Mat::zeros(cv::Size(cv_src.cols, cv_src.rows), CV_8UC3);const int bg_color[3] = { 219,142,67 };float* alpha_data = (float*)alpha.data;for (int i = 0; i < cv_matting.rows; i++){for (int j = 0; j < cv_matting.cols; j++){float alpha_ = alpha_data[i * cv_matting.cols + j];cv_dst.at < cv::Vec3b>(i, j)[0] = cv_src.at < cv::Vec3b>(i, j)[0] * alpha_ + (1 - alpha_) * bg_color[0];cv_dst.at < cv::Vec3b>(i, j)[1] = cv_src.at < cv::Vec3b>(i, j)[1] * alpha_ + (1 - alpha_) * bg_color[1];cv_dst.at < cv::Vec3b>(i, j)[2] = cv_src.at < cv::Vec3b>(i, j)[2] * alpha_ + (1 - alpha_) * bg_color[2];}} }

    2.一些不錯(cuò)的效果:




    3.還有一些是場(chǎng)景處理不是很好。



    4. 我現(xiàn)在訓(xùn)練的樣本在10000張左右,如果加大樣本量或者優(yōu)化下算法,是可以解決掉這些問(wèn)題點(diǎn)。
    5. 模型和源碼都上傳到CSDN,感興趣的可以下載試玩:https://download.csdn.net/download/matt45m/51419768

    總結(jié)

    以上是生活随笔為你收集整理的智能人像自动抠图——C++ 实现LFM 模型推理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 我的公把我弄高潮了视频 | 天天射av| 成人av动漫 | 日b视频免费观看 | 久久精品美乳 | 亚洲 高清 成人 动漫 | 日韩精品久久久久久久的张开腿让 | 亚洲天堂影院在线观看 | 国产一区亚洲二区 | www日日日 | 在线国产精品视频 | 午夜激情电影院 | 操久久| 涩涩视频网站 | 亚洲伦理中文字幕 | 色综合99久久久无码国产精品 | 在线免费观看小视频 | 久久爱影视i | 一区二区精品在线 | 奇米激情 | 国产三级国产精品国产国在线观看 | 91精品国产91久久久 | ktv做爰视频一区二区 | 色婷婷av一区二区三区大白胸 | 日本免费一区二区三区最新 | 少妇又白又嫩又色又粗 | 国产av电影一区二区三区 | 在线视频精品一区 | 久久蜜桃av| 国产第一草草影院 | 麻豆成人免费 | 免费看黄色片的网站 | aa在线| www激情 | 天堂视频免费在线观看 | 网爆门在线 | 欧美日韩综合网 | 精品无码国产av一区二区三区 | jizzjizzjizz国产 | 婷婷丁香花五月天 | 爆操少妇 | 午夜影院a| 黄色伊人 | 中文字幕第一区 | 色就色综合 | 无码免费一区二区三区免费播放 | 免费黄色美女网站 | 国产精品无码白浆高潮 | 久久国产乱子伦免费精品 | 国产xxx在线 | 亚洲精品网站在线 | 一起操网址 | 一级黄色性视频 | av资源在线看 | 神马午夜一区二区 | 射死你天天日 | 强伦人妻一区二区三区 | 东北老女人av| 超碰在线国产97 | 奇米网久久 | 可以免费观看的av网站 | 欧美激情视频网站 | 国产不卡一区二区视频 | 日韩激情视频在线观看 | 伊人福利在线 | 国产精品波多野结衣 | 毛片毛片毛片毛片毛片毛片毛片 | 在线观看欧美日韩 | 日日夜夜爽爽 | 少妇无码av无码专区在线观看 | 国产亚洲成av人片在线观看桃 | 91影院在线免费观看 | 欧美自拍一区 | 久久精品视频一区二区三区 | 蜜桃视频成人在线观看 | 天天人人综合 | 理论片在线观看视频 | 午夜网站在线观看 | 很污的网站 | 欧美在线视频不卡 | 自拍偷拍欧美激情 | 久久一级大片 | 欧美日韩亚洲国产一区 | 久久成人激情 | 长河落日电视连续剧免费观看01 | 亚洲三级视频 | 四虎在线视频 | 亚洲精品偷拍 | 亚洲av久久久噜噜噜熟女软件 | 国产麻豆一精品一av一免费 | 我们的2018在线观看免费高清 | 国产小视频免费观看 | 中文字幕在线观看视频网站 | 美女av一区二区 | 亚洲交性网 | 国产a∨精品一区二区三区仙踪林 | 天天干夜夜看 | 色哟哟一区二区三区四区 | 成人v片 |