2017-02-25 41 views
0

我正在寫一個IOS應用程序,它決定矩形中的顏色強度。我的測量是計算紅色矩形區域落在黑色背景頂部的白紙時的亮度值。顯示是在iphone 6垂直舉行,強度測量是在xcode的調試窗口中看到。當我在黑色背景中放置白紙時,強度值約爲30,表示強度計算的位置可能表示黑色區域。當我將手機靠近白紙時,白紙位於手機底部附近,圖片被放大,它的值接近200,這很有意義。你能告訴我我做錯了什麼嗎?下面的代碼是寫在視圖 - 控制時,Xcode 8.2.1IOS Opencv顏色值和位置不匹配

- (void)processImage:(cv::Mat&)image 
    cv::Mat curFrame = image 
    cv::rectangle(curFrame, cvPoint(180+15, 300-15),cv::Scalar(0,0,255, 255),5); 
    uchar intensity = curFrame.at<uchar>(cvPoint(180, 300)); 
    int intensityvalue = 255; 
    intensityvalue = (int) intensity; 
    NSLog (@"intensity: %d ", intensityvalue); 
+0

對不起手機水平不是垂直舉行 – jay

+0

也是在這個例子中,180是垂直高度y,300是水平高度x。我知道opencv顛倒強度(y,x)。 – jay

+0

爲什麼在curFrame.at (cvPoint(180,300))''中使用'uchar'?由於你的curFrame的類型是BGRA,你應該用相應的類型來替換'uchar'。有關詳細信息,請參見[this](http://stackoverflow.com/questions/7899108/opencv-get-pixel-channel-value-from-mat-image)。或者你可以分割'curFrame'的通道並在藍色通道上使用'uchar'。 –

回答

0

如果你只需要強度,你可以嘗試:

- (void)processImage:(cv::Mat&)image{ 
    cv::Mat curFrame = image // why don't you use image directly? 
    cv::Mat gray; 

    // convert to gray scale, make sure that your curFrame is RGBA or BGRA 
    cv::cvtColor(curFrame,gray,cv::CV_RGBA2GRAY); 
    int intensity = gray.at<uchar>(cvPoint(180, 300)); 
    NSLog (@"intensity: %d ", intensity); 

    // draw the rectangle after you already extract the intensity 
    // otherwise it may interfere with your sample 
    cv::rectangle(curFrame, cvPoint(180+15, 300-15),cv::Scalar(0,0,255, 255),5); 
} 
+0

更遠,謝謝它現在的作品 – jay