C++?opencv利用grabCut算法實現(xiàn)摳圖示例
前言
grabCut算法利用了圖像中的紋理(顏色)信息和邊界(反差)信息,只用少量的用戶交互操作,即可得到比較好的分割結果,和分水嶺順豐比較相似,但是計算速度比較慢,得到的結果比較精確
用法:輸入一幅圖片并對一些像素做屬于背景或屬于前景的標記,算法會根據(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ù)主要用于兩個圖像之間進行逐像素的比較
void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop); src1 原始圖像1 src2原始圖像2 dst 結果圖像 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算法實現(xiàn)摳圖示例的詳細內(nèi)容,更多關于C++ opencv grabCut算法摳圖的資料請關注腳本之家其它相關文章!
相關文章
C++ 將字符串值賦給CHAR數(shù)組的實現(xiàn)
這篇文章主要介紹了C++ 將字符串值賦給CHAR數(shù)組的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
C語言?智能指針?shared_ptr?和?weak_ptr
這篇文章主要介紹了C語言?智能指針?shared_ptr?和?weak_ptr,weak_ptr引入可以解決shared_ptr交叉引用時無法釋放資源的問題,下面來學習具體相關內(nèi)容吧,需要的朋友可以參考一下2022-04-04
QT?UDP網(wǎng)絡編程實現(xiàn)簡單消息傳輸
這篇文章主要為大家詳細介紹了QT?UDP網(wǎng)絡編程實現(xiàn)簡單消息傳輸,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08

