Programming 1

Manipulating Pixels

1.saltImage: Add salt-and-pepper noise into an image. 

image類型的表示方法命名規則為 CV_<位數><符號類型><數據類型><通道數>

<位數> 表示每個像素的位數,通常是8、16或32。

<符號類型> 表示像素值的符號類型,通常是 U(Unsigned) 表示無號或 S(signed) 表示有號。

<數據類型> 表示像素值的數據類型,通常是C表示字符型、F表示浮點型或者其他類型的簡寫,例如R表示浮點型像素的實部,I表示整型像素的虚部等。

<通道數> 表示圖像的通道數,通常是1、2、3或4,也可以是其他數值。

2.colorReduce: Reduce the number of colors into 1/N. 

第四項為我自己加入的iomanip,為了在輸出文字的格式做一些調整。

getTickCount減去start為執行函式後增加的週期數,除以時鐘頻率getTickFrequency,得到的結果為執行函式所花的時間。

右圖為此部分輸出結果,時間單位為秒(secs)。

右圖為此部分輸出結果。




下圖為此部分輸出結果,每張圖的輸出相同。

original version(原始)

with iterators(最慢)

overloaded operators(最快)

結果分析:

3.contrast:Enhance an image by sharpening methods.

imgroc為OpencCV圖像處理的核心標頭檔,提供了許多用於圖像處理和計算的函數和工具

左下為原圖,可以觀察到三個函式輸出的影像都有明顯銳利化的效果。

4.addImages:Add two imags to get a blended image. 

vector是C++ 的標準標頭檔之一,可以讓程式設計師使用 STL (Standard Template Library) 中的 vector 容器,vector 容器是一個動態陣列,可以根據需要自動調整大小,並且支援隨機存取、插入、刪除等操作。

分別定義image1和image2並讀取、顯示。

addWeighted函式功能為將兩張影像進行線性混合 (linear blending)。

參數為兩張影像及分配權重,亮度調整,輸出。

下方則直接直接使用算術運算做結合。

結果分析:

5.remapping:Simulate a lens distortion to create distorted images. 

結果分析:

ReferenceOpenCV 4 Computer Vision Application Programming Cookbook CH2, by D. M. Escrivá, R. Laganiere, Fourth Edition, Packt Publishing, 2019.[Book URL]  [GitHub