2014-06-29 15 views
16

मैं चाहूँगा पता है कि कैसे OpenCV में अर्द्ध पारदर्शी आकार, नीचे दी गई छवि में उन लोगों (http://tellthattomycamera.wordpress.com/ से) के लिए इसी तरहअर्ध पारदर्शी आकार कैसे बनाएं?

enter image description here

मैं उन फैंसी हलकों की जरूरत नहीं है, लेकिन मैं चाहते हैं आकर्षित करने के लिए , एक 3 चैनल रंग छवि पर कुछ

rectangle (img, Point (100,100), Point (300,300), Scalar (0,125,125,0.4), CV_FILLED); 

जहां 0,125,125 आयत का रंग है और 0.4 की तरह एक आयत, जैसे आकर्षित और आयत की पारदर्शिता निर्दिष्ट करने के लिए, सक्षम होने के लिए पारदर्शी निर्दिष्ट करता है cy। हालांकि ओपनसीवी में इस कार्यक्षमता को अपने ड्राइंग कार्यों में नहीं बनाया गया है। मैं OpenCV में आकृतियों को कैसे आकर्षित कर सकता हूं ताकि मूल छवि को आकृति के माध्यम से आंशिक रूप से दिखाई दे?

उत्तर

29

नीचे दी गई छवि OpenCV का उपयोग करके पारदर्शिता को दर्शाती है। आपको छवि और आयताकार के बीच अल्फा मिश्रण करने की आवश्यकता है। ऐसा करने के लिए एक तरीका कोड नीचे है।

enter image description here

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main(int argc, char** argv) 
{ 
    cv::Mat image = cv::imread("IMG_2083s.png"); 
    cv::Mat roi = image(cv::Rect(100, 100, 300, 300)); 
    cv::Mat color(roi.size(), CV_8UC3, cv::Scalar(0, 125, 125)); 
    double alpha = 0.3; 
    cv::addWeighted(color, alpha, roi, 1.0 - alpha , 0.0, roi); 

    cv::imshow("image",image); 
    cv::waitKey(0); 
} 
+2

उत्तर के लिए और आपके धैर्य के लिए धन्यवाद, लेकिन मैं इसे हल एक और तरीके से, फंक्शन addWeighted का उपयोग कर। इस तरह: टोपी >> img; img.copyTo (प्रतिलिपि); आयताकार (प्रतिलिपि, प्वाइंट (100,100), प्वाइंट (300.300), स्केलर (0,125,125), सीवी_फिल्ल्ड, सीवी_एए, 0); ऐडवेइटेड (प्रतिलिपि, 0.4, 0.1 से 0 .4,0 आईएमजी, आईएमजी); imshow ("img", img); – user3788572

+1

@ बुल, मेरे पास एक प्रश्न था, आप 'add'eighted 'फ़ंक्शन कॉल में' image' Mat ऑब्जेक्ट का उपयोग नहीं कर रहे हैं, यह छवि को अपडेट कैसे कर रहा है? धन्यवाद –

+2

@Prakash 'roi' में डेटा' image' में डेटा का एक आयताकार टुकड़ा है। यही है, अगर आप 'roi' से पढ़ते हैं तो आप 'छवि' से पढ़ रहे हैं, यदि आप 'roi' संशोधित करते हैं तो आप 'छवि' को भी संशोधित कर रहे हैं। – Bull

8

OpenCV 3 में इस कोड को मेरे लिए काम किया:

cv::Mat source = cv::imread("IMG_2083s.png"); 
cv::Mat overlay; 
double alpha = 0.3; 

// copy the source image to an overlay 
source.copyTo(overlay); 

// draw a filled, yellow rectangle on the overlay copy 
cv::rectangle(overlay, cv::Rect(100, 100, 300, 300), cv::Scalar(0, 125, 125), -1); 

// blend the overlay with the source image 
cv::addWeighted(overlay, alpha, source, 1 - alpha, 0, source); 

स्रोत/से प्रेरित होकर: http://bistr-o-mathik.org/2012/06/13/simple-transparency-in-opencv/

संबंधित मुद्दे