C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖示例
前言
grabCut算法利用了圖像中的紋理(顏色)信息和邊界(反差)信息,只用少量的用戶交互操作,即可得到比較好的分割結(jié)果,和分水嶺順豐比較相似,但是計(jì)算速度比較慢,得到的結(jié)果比較精確
用法:輸入一幅圖片并對一些像素做屬于背景或?qū)儆谇熬暗臉?biāo)記,算法會根據(jù)這個局部標(biāo)記計(jì)算出整個圖像中前景和背景的分割線。
一、grabCut函數(shù)
void grabCut(InputArray img, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, int iterCount, int mode = GC_EVAL); img 輸入圖像 mask 輸出掩碼 rect 用戶選擇的前景矩形區(qū)域 bgdModel 輸出背景圖像 fgdModel 輸出前景圖像 iterCount 迭代次數(shù) mode 用于指示函數(shù)執(zhí)行什么操作
二、compare函數(shù)
compare函數(shù)主要用于兩個圖像之間進(jìn)行逐像素的比較
void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop); src1 原始圖像1 src2原始圖像2 dst 結(jié)果圖像 cmpop 操作類型
三、代碼
#include<iostream> #include<opencv.hpp> using namespace std; using namespace cv; int main() { Mat img1; img1 = imread("test2.jpg"); imshow("原圖", img1); Rect rect(84, 84, 406, 318); Mat img2, bg, fg; grabCut(img1, img2, rect, bg, fg,1,GC_INIT_WITH_RECT); compare(img2, GC_PR_FGD, img2, CMP_EQ); imshow("img2", img2); Mat img3(img1.size(), CV_8UC3, Scalar(255, 255, 255)); img1.copyTo(img3, img2); imshow("img3", img3); waitKey(0); }
效果圖:
以上就是C++ opencv利用grabCut算法實(shí)現(xiàn)摳圖示例的詳細(xì)內(nèi)容,更多關(guān)于C++ opencv grabCut算法摳圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++ 將字符串值賦給CHAR數(shù)組的實(shí)現(xiàn)
這篇文章主要介紹了C++ 將字符串值賦給CHAR數(shù)組的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01C語言?智能指針?shared_ptr?和?weak_ptr
這篇文章主要介紹了C語言?智能指針?shared_ptr?和?weak_ptr,weak_ptr引入可以解決shared_ptr交叉引用時(shí)無法釋放資源的問題,下面來學(xué)習(xí)具體相關(guān)內(nèi)容吧,需要的朋友可以參考一下2022-04-04QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡單消息傳輸
這篇文章主要為大家詳細(xì)介紹了QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡單消息傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08