演算法學習之路|影像過濾

kissjz發表於2018-02-28

影像過濾是把影像中不重要的畫素都染成背景色,使得重要部分被凸顯出來。現給定一幅黑白影像,要求你將灰度值位於某指定區間內的所有畫素顏色都用一種指定的顏色替換。

輸入格式

輸入在第一行給出一幅影像的解析度,即兩個正整數M和N(0 < M, N <= 500),另外是待過濾的灰度值區間端點A和B(0 <= A < B <= 255)、以及指定的替換灰度值。隨後M行,每行給出N個畫素點的灰度值,其間以空格分隔。所有灰度值都在[0, 255]區間內。

輸出格式

輸出按要求過濾後的影像。即輸出M行,每行N個畫素灰度值,每個灰度值佔3位(例如黑色要顯示為000),其間以一個空格分隔。行首尾不得有多餘空格。

輸入樣例:
3 5 100 150 0
3 189 254 101 119
150 233 151 99 100
88 123 149 0 255
輸出樣例:
003 189 254 000 000
000 233 151 099 000
088 000 000 000 255
解題思路:很簡單,判斷一個(i,j)的

(I-1,j-1)(I-1,j)(I+1,j)

(I,j-1) (I,j+1)

(I+1,j-1)(I+1,j)(I+1,j+1)即可


#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
int main(){
    int hang,lie;
    int low,high,sub;
    cin>>hang>>lie>>low>>high>>sub;

    vector<int> v;
    for(int i=0;i<hang*lie;i++){
        int tmp;
        cin>>tmp;
        if(tmp<=high&&tmp>=low)
            tmp=sub;
        v.push_back(tmp);
    }
    int i=0;
    for(;i<v.size()-lie;i++){
        printf("%03d",v[i]);
        if((i+1)%lie==0)
            cout<<endl;
        else
            cout<<" ";
    }
    for(;i<v.size()-1;i++){
        printf("%03d ",v[i]);
    }
    printf("%03d",v[v.size()-1]);
}


相關文章