2012-06-08 112 views
1

我們急需幫助,我們在Android(Java)中使用openCv。 我們面臨着很多問題:Android上的opencv問題

convertTo()不起作用,所以我們不能將3通道圖像轉換爲1通道而不通過cvtColor()。

grayImg.convertTo(grayImg, CvType.CV_8UC1); 

cvtColor()給出了一個怪異輸出:這條線的

Imgproc.cvtColor(src, grayImg, Imgproc.COLOR_RGB2GRAY); 

輸出是圖像重複4次! 擺脫這種重複的唯一方法是添加這一行,輸出是一個白色和黑色的圖像,但3通道,所以它崩潰任何即將到來的功能,因爲它需要1通道圖像。

Imgproc.cvtColor(grayImg, grayImg, Imgproc.COLOR_GRAY2RGB,3); 

精明()的邊緣檢測:

Imgproc.Canny(grayImg, grayImg, 10, 100,3,true); 

findContours()計算輪廓的可怕數,而圖像中的對象的數目僅爲2輸入圖像是3通道BMP圖像,我們轉換它對墊子。

輸出圖像:

https://dl.dropbox.com/u/36214963/canny.jpg

謝謝你的關心

回答

0

我還沒有實際使用過OpenCV的,但我不認爲convertTo是你要找的答案。

通過查看OpenCV的文檔,我發現this

cvtColor - 從一個色彩空間到另一個

Mat color; // the input image 
Mat gray(color.rows, color.cols, color.depth()); 
cvtColor(color, gray, CV_BGR2GRAY); 

或者乾脆將圖像轉換(和功能cvtColor將創建圖像內部):

Mat color; 
Mat gray; 
cvtColor(color, gray, CV_BGR2GRAY); 
+0

是的,我們已經做到了這一點,但輸出是如圖所示它是如此奇怪..感謝您關心,如果你知道什麼解決方案,請幫助我們 –

0

如果我正確理解你的第一個問題,你有兩種選擇將RGB圖像轉換爲灰度圖像。

選項1:將3通道圖像轉換爲1通道,就像您正在嘗試的那樣。

IplImage *RGB_image = cvLoadImage("my_colored_image.jpg"); 
IplImage *GRAY_IMAGE = cvCreateImage(cvGetSize(RGB_image), IPL_DEPTH_8U, 1); 
cvCvtColor(RGB_image, GRAY_IMAGE, CV_RGB2GRAY); 

選項2:直接讀取彩色圖像作爲灰度圖像。

IplImage* GRAY_IMAGE = cvLoadImage("my_colored_image.jpg", CV_LOAD_IMAGE_GRAYSCALE); 

我希望這適合你。

+0

我們也試圖這樣做,我們使輸入圖像灰度圖像(從MATLAB獲得)和相同的結果不斷出現! –

+0

你會附上輸入圖像和部分代碼給出這些奇怪的結果,我會等待鏈接。 – Ismail

+0

image:https://dl.dropbox.com/u/36214963/canny.jpg src = Utils.bitmapToMat(bmp); grayImg = new Mat(src.rows(),src.cols(),CvType.CV_8UC1); Imgproc.cvtColor(src,grayImg,Imgproc.COLOR_RGB2GRAY,1); –

4

嘗試BGR2GRAY而不是RGB2GRAY。我有同樣的問題,我解決它通過this.There也是文檔中關於這個

記圖像從一個色彩空間轉換到另一個。

函數cvtColor將輸入圖像從一個顏色空間轉換爲另一個顏色空間。如果要轉換RGB顏色空間,則應明確指定通道的順序(RGB or BGR)。 請注意,OpenCV中的默認顏色格式通常稱爲RGB,但它實際上是BGR(字節反轉)。因此,標準(24位)彩色圖像中的第一個字節將是一個8位藍色分量,第二個字節將是綠色,而第三個字節將是紅色。第四,第五和第六個字節將成爲第二個像素(藍色,然後是綠色,然後是紅色),依此類推。