基本上我想爲我的繪畫應用程序實現顏色替換功能。 下面是原始的和預期的輸出iPhone應用程序的圖像中的顏色替換
原文:
用戶與某個閾值以及選擇更換改變牆壁的顏色
我已經嘗試了兩種方法,但不能得到預期運行後
方法1:
Queue-based Flood Fill算法顏色替換 但我得到低於輸出非常緩慢,牆影未得到保存。
方法2: 所以我必須想看看另一種選擇和SO How to change a particular color in an image?
發現下面的文章,但我無法理解我的,從代碼實現的邏輯,而不是確定第3步。
請根據我的理解,找到以下代碼,瞭解每個步驟。
1)使用cvCvtColor將圖像從RGB轉換爲HSV(我們只想更改色調 )。
IplImage *mainImage=[self CreateIplImageFromUIImage:[UIImage imageNamed:@"original.jpg"]];
IplImage *hsvImage = cvCreateImage(cvGetSize(mainImage), IPL_DEPTH_8U, 3);
IplImage *threshImage = cvCreateImage(cvGetSize(mainImage), IPL_DEPTH_8U, 3);
cvCvtColor(mainImage,hsvImage,CV_RGB2HSV);
2)隔離與cvThreshold指定 一定公差的顏色(要一定範圍的顏色,而不是一個平面彩色)。的最小尺寸以下的顏色
cvThreshold(hsvImage, threshImage, 0, 100, CV_THRESH_BINARY);
3)棄區域使用斑點檢測 庫等cvBlobsLib。這將消除場景中類似 顏色的點。 我是否需要指定原始圖像或thresold圖像?
CBlobResult blobs = CBlobResult(threshImage, NULL, 0);
blobs.Filter(blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 10);
4)面膜與cvInRangeS顏色和使用 所得掩模以應用新的色調。
不確定這個函數如何幫助顏色替換,並且不能理解要提供的參數。
5)cv將新圖像與 新色調合成一個圖像,並在第1步中保存的飽和度和亮度 通道組成。
我明白,cvMerge會合並H S和V三個通道,但我如何使用以上三個步驟的輸出。
所以基本上堅持了OpenCV的實現,
如果可能的話,請指導我對OpenCV的實行或任何其他解決方案試訓。
是 代替CVSET這是不夠的修改在步驟4中只是色相,然後使用原始飽和度在第5步。看看你的例子中的牆。它是灰色的。灰色的飽和度爲零(或非常接近於零),這意味着色調沒有影響。要將牆壁變成藍色,您需要將飽和度設置爲接近1(*和*您需要設置色調)。 – 2013-02-26 05:38:59
rob你認爲我的第二步和第三步是正確的嗎? – 2013-02-26 15:13:58
@JigarParekh我有同樣的問題,但我必須做到實時(在相機圖像的手段),所以你可以指導如何做到這一點 – Prabhakar 2015-06-18 07:58:39