Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ภาพนุ่มนวลขึ้นใน C++


สมมติว่าเรามีเมทริกซ์ 2 มิติ M ที่แสดงระดับสีเทาของรูปภาพ เราต้องออกแบบให้เรียบขึ้นเพื่อให้ระดับสีเทาของแต่ละพิกเซลกลายเป็นระดับสีเทาเฉลี่ย (ปัดเศษลง) ของพิกเซลโดยรอบทั้ง 8 พิกเซลและตัวมันเอง หากเซลล์มีเซลล์รอบๆ น้อยกว่า 8 เซลล์ ให้แปลงพิกเซลที่เป็นไปได้ทั้งหมด

ดังนั้นหากอินพุตเป็นแบบ

1 1 1
1 0 1
1 1 1

แล้วผลลัพธ์ที่ได้จะเป็น

0 0 0
0 0 0
0 0 0

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • R :=จำนวนแถวของ M

  • C :=จำนวนคอลัมน์ของ

  • กำหนดอาร์เรย์ d ={ -1, 0, 1 }

  • กำหนดขนาดอาร์เรย์ 2D หนึ่งรายการ (R x C)

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ผลรวม :=0, นับ :=0

      • สำหรับการเริ่มต้น k :=0 เมื่อ k <3 อัปเดต (เพิ่ม k ขึ้น 1) ทำ -

        • สำหรับการเริ่มต้น l :=0 เมื่อ l − 3 อัปเดต (เพิ่ม l ขึ้น 1) ทำ −

          • m :=i + d[k], n :=j + d[l]

          • ถ้า m>=0 และ m =0 และ n

            • เพิ่มจำนวนขึ้น 1 และ sum =ผลรวม + M[m, n]

      • res[i, j] :=sum / count

  • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include ใช้เนมสเปซ std;void print_vector(vector> v){ cout <<"["; for(int i =0; i> imageSmoother(vector>&M) { int R =M.size(); int C =M[0].size(); เวกเตอร์ d{ -1, 0, 1 }; vector> res(R, vector(C, 0)); สำหรับ (int i =0; i =0 &&m =0 &&n > v ={{1,1,1},{1,0,1},{1,1,1}}; print_vector(ob.imageSmoother(v));}

อินพุต

<ก่อน>{{1,1,1},{1,0,1},{1,1,1}}

ผลลัพธ์

[[0, 0, 0, ],[0, 0, 0, ],[0, 0, 0, ],]