मैं लोड की गई छवि की चमक बढ़ाने का प्रयास कर रहा हूं img, हालांकि पिक्सल के माध्यम से साइकिल चलाने के लिए मैं एक छोटे मैट्रिक्स का उपयोग कर रहा हूं [जिसे मैं बाद में गॉसियन ब्लर लागू करने के लिए उपयोग करूंगा]। यहाँ मेरा कार्य है:

void Dobright(cv::Mat &in,IplImage * img)
{   
    uchar* temp_ptr ;
    for( int row = 0; row < in.rows; row++) 
    {
            for ( int col = 0; col < in.cols; col++) 
            {
                CvPoint pt = {row,col};
                temp_ptr  = &((uchar*)(img->imageData + img->widthStep*pt.y))[pt.x*3];
                temp_ptr[0] += 100;
                temp_ptr[1] += 100;
                temp_ptr[2] += 100;
            }
    }
}

हालाँकि अगर मूल छवि थी:

enter image description here

मुझे चमकदार छवि मिलती है:

enter image description here

जैसा कि आप देख सकते हैं कि कुछ भाग दूसरों की तुलना में उज्जवल हैं और चूंकि पंक्तियाँ और स्तंभ समान नहीं हैं इसलिए पूरी छवि के पिक्सेल तक नहीं पहुँचा जा सकता है, इस समस्या को कैसे हल किया जाए?

2
Expert Novice 22 अक्टूबर 2011, 18:15
क्या आप जानते हैं कि गॉसियन ब्लर लगाने के लिए ओपनसीवी फ़ंक्शन हैं, साथ ही मैट्रिसेस को स्केल करने के लिए एक फ़ंक्शन भी है? (उदाहरण के लिए cv::Mat::convert ())
 – 
Unapiedra
27 अक्टूबर 2011, 15:21

2 जवाब

सबसे बढ़िया उत्तर

इसके लुक से आपकी चौड़ाई और ऊंचाई मिश्रित है, इसका उपयोग करके देखें:
CvPoint pt = {col,row};

आपके वर्तमान एल्गोरिदम के साथ भी आप समस्याओं में भाग लेंगे जब आपके पिक्सेल मूल मान> 155, (156 + 100 = 1) गोलाकार होने के कारण हैं। प्रयोग करने का प्रयास करें

tmp_ptr[0] = (tmp_ptr > 155) ? 255 : tmp_ptr[0] + 100;

1
Serdalis 27 अक्टूबर 2011, 14:00

ऐसा लगता है कि आपने अपना x और y यहां फ़्लिप कर दिया है। आप चाहते हैं कि CvPoint {col,row} न हो {row,col}

इसके बारे में इस तरह से सोचें: तीसरी पंक्ति, पाँचवाँ स्तंभ बिंदु (5,3) है, न कि बिंदु (3,5)।

1
Matt Bridges 22 अक्टूबर 2011, 18:22