Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में इमेज स्मूथ

मान लीजिए कि हमारे पास एक 2D मैट्रिक्स M है जो एक छवि के ग्रे स्केल का प्रतिनिधित्व करता है, हमें प्रत्येक पिक्सेल के ग्रे स्केल को सभी 8 आसपास के पिक्सेल का औसत ग्रे स्केल (गोल नीचे) बनाने के लिए एक स्मूथ डिज़ाइन करना होगा। अगर किसी सेल में आसपास के 8 से कम सेल हैं, तो सभी संभावित पिक्सल को कन्वर्ट करें।

तो, अगर इनपुट पसंद है

1 1 1
1 0 1
1 1 1

तो आउटपुट होगा

0 0 0
0 0 0
0 0 0

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • आर:=एम की पंक्ति गणना

  • सी :=कॉलम गिनती

  • एक सरणी परिभाषित करें d ={ -1, 0, 1 }

  • एक 2D सरणी आकार (R x C) परिभाषित करें

  • इनिशियलाइज़ करने के लिए i:=0, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • योग :=0, गिनती :=0

      • इनिशियलाइज़ k :=0 के लिए, जब k <3, अपडेट करें (1 से k बढ़ाएँ), करें -

        • इनिशियलाइज़ l :=0 के लिए, जब l -3, अपडेट करें (l को 1 से बढ़ाएँ), −

          करें
          • एम:=आई + डी [के], एन:=जे + डी [एल]

          • अगर एम>=0 और एम <आर और एन>=0 और एन <सी, तो -

            • गिनती में 1 और योग =योग + M[m, n]

              . की वृद्धि करें
      • रेस [i, j] :=योग / गिनती

  • रिटर्न रेस

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
      int R = M.size();
      int C = M[0].size();
      vector<int> d{ -1, 0, 1 };
      vector<vector<int> > res(R, vector<int>(C, 0));
      for (int i = 0; i < R; ++i) {
         for (int j = 0; j < C; ++j) {
            int sum = 0, count = 0;
            for (int k = 0; k < 3; ++k) {
               for (int l = 0; l < 3; ++l) {
                  int m = i + d[k], n = j + d[l];
                     if (m >= 0 && m < R && n >= 0 && n < C) ++count, sum += M[m][n];
                  }
               }
               res[i][j] = sum / count;
            }
         }
         return res;
      }
};
main(){
   Solution ob;
   vector<vector<int>> 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, ],]

  1. सी ++ का उपयोग कर ओपनसीवी में किसी छवि में टेक्स्ट कैसे डालें?

    OpenCV में, हम puttext () फ़ंक्शन का उपयोग करके छवि में कुछ टेक्स्ट डाल सकते हैं। यह फ़ंक्शन . में परिभाषित किया गया है शीर्षलेख। किसी इमेज में टेक्स्ट डालने के लिए, हमें सबसे पहले उस मैट्रिक्स को घोषित करना होगा जो इमेज को लोड करेगा। हमारे प्रोग्राम में एक इमेज लोड करने के बजाय, हमने मैट्रिक्स को

  1. सी ++ का उपयोग कर ओपनसीवी में बाइनरी छवि को कैसे पलटना है?

    बाइनरी इमेज को इनवर्ट करने का मतलब है पिक्सल वैल्यू को इनवर्ट करना। एक दृश्य परिप्रेक्ष्य से, जब हम एक बाइनरी छवि को उलटते हैं, तो सफेद पिक्सेल काले रंग में परिवर्तित हो जाएंगे, और काले पिक्सेल सफेद में परिवर्तित हो जाएंगे। इस फ़ंक्शन का मूल रूप है - cvtColor(original_image, grayscale_image, COLOR_

  1. सी ++ का उपयोग कर ओपनसीवी में बाइनरी छवि कैसे बनाएं?

    एक द्विआधारी छवि सिर्फ एक डिजिटल छवि है जो दो रंगों, काले और सफेद का प्रतिनिधित्व करती है। इमेज प्रोसेसिंग के नजरिए से, बाइनरी इमेज में दो संभावित मानों वाले पिक्सल होते हैं- शून्य और एक। जब पिक्सेल का मान 0 होता है, तो यह एक शुद्ध काले रंग का प्रतिनिधित्व करता है। जब पिक्सेल का मान 1 होता है, तो इस