1、作業說明
撰寫一個程式讀取一張圖片,將圖像中每一個點像素的值各加上一個數值。如果輸入圖像是灰階圖像,改變每個像素的灰階值;如果輸入圖像是全彩圖像(RGB),則只改變每個像素的 R 值。 注意修改後像素值溢位 Overflow 問題(像素值介於 0 與 255 之間)。
2、開發環境
- Windows 10
- Microsoft Visual Studio 2019
- OpenCv 4.5.0
- C++
3、程式說明
1. 讀取圖像
以imread("[path]")讀取圖像。
2. 判斷讀取圖像為灰階或彩色圖
以每個像素點是否接相等判斷圖像為灰階或彩色圖片,若三者皆相等即為灰階圖,有不同則為彩色圖。
3. 若圖像為灰階,改變每個像素的灰階值
同時改變 img.at<Vec3b>(i, j)[0]、img.at<Vec3b>(i, j)[1]、img.at<Vec3b>(i, j)[2]的值,即可改變圖像灰階值。
4. 若圖像為彩色,改變每個像素的R值
img.at<Vec3b>(i, j)[0]、img.at<Vec3b>(i, j)[1]、img.at<Vec3b>(i, j)[2] 分別表示圖像的G、B、R值,改變 img.at<Vec3b>(i, j)[2]即可改變R值。
5. 解決overflow與underflow問題
每個像素值的範圍在0到255,於是只要超過255就稱為overflow,低於0就稱為underflow。解決方式就是當像素值overflow時,更改像素值到255;underflow就改變為0即可。
6. 輸出圖像並儲存
以imshow輸出更改前與更改後的圖像,並將更改後的圖片以imwrite儲存。
4、執行結果
操作介面: 在此輸入想增加或減少的值(減少即為負數)
沒有留言:
張貼留言