OpenCV for iOS 學(xué)習(xí)筆記(三)—— 改變圖像的對(duì)比度和亮度



先看效果:

效果演示: 上為原圖 ,下為效果

主要代碼如下(注意:記得在引用頭文件下面加: using namespace cv;):

  • 將自己要處理的圖片裝換為 Mat 形式
UIImage *image1 = [UIImage imageNamed:@"6.jpg"];   
Mat image;
  // 將UIImage 對(duì)象轉(zhuǎn)換成 Mat 形式
UIImageToMat(image1, image);    
  • 初始化接收最后修改結(jié)果的 Mat 對(duì)象,
    • 像素值初始化為0 ;
  • 與原圖像有相同的大小和類(lèi)型,
Mat new_image = Mat::zeros(image.size(), image.type());
  • 聲明 對(duì)比度 alpha 與 亮度 beta
double alpha = [0, 3];  
double beta = [0, 100];

[n, m]這里表示我使用的區(qū)間 此處需重新指定值 這里我使用 Slider.value 進(jìn)行控制

  • 實(shí)現(xiàn)效果核心代碼
for( int i = 0; i < image.rows; i++) { 
    for( int j = 0; j < image.cols * 1.5; j++) {
        for( int k = 0; k < 3; k++) {
            new_image.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(alpha * ( image.at<Vec3b>(i, j)[k]) + beta);
        }
    }
  } 

注釋?zhuān)捍颂巿?zhí)行

i 和 j 表示像素位于 第i行 和 第j列

- - - -

  • 為了訪問(wèn)圖像的每一個(gè)像素,使用語(yǔ)法: image.at<Vec3b>(i, j)[k] ,其中, i 是像素所在的行, j 是像素所在的列, k 是R、G、B(0、1、2)之一。

  • 用 saturate_cast 對(duì)結(jié)果進(jìn)行轉(zhuǎn)換,以確保它為有效值。

  • 最后需要將 Mat 轉(zhuǎn)換為 UIImage 對(duì)象

UIImage *img = MatToUIImage(new_image)

用UIImage對(duì)象接收, 將圖片加載到UIImageView 就可以看到效果了

上述代碼按順序復(fù)制到工程中即可編譯執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容