2022年2月24日 星期四

s1083303 作業1

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、執行結果

操作介面: 在此輸入想增加或減少的值(減少即為負數)

各圖前後對比

graybook:
原圖                         +100
原圖                         -100

lennaRGB
原圖                       R值+100
原圖                       R值-100








沒有留言:

張貼留言