OpenCV

2016-06-25 19 views
13

में छवियों को सामान्यीकृत करने के बाद मैंने ओपनसीवी में NORM_L1 का उपयोग करके एक छवि को सामान्यीकृत करने के लिए निम्न कोड लिखा था। लेकिन आउटपुट छवि सिर्फ काला थी। इसे कैसे हल करें?OpenCV

import cv2 
import numpy as np 
import Image 

img = cv2.imread('img7.jpg') 
gray_image = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
a = np.asarray(gray_image) 


dst = np.zeros(shape=(5,2)) 

b=cv2.normalize(a,dst,0,255,cv2.NORM_L1) 


im = Image.fromarray(b) 

im.save("img50.jpg") 

cv2.waitKey(0) 
cv2.destroyAllWindows() 
+0

एल 1 के साथ छवि को सामान्य करने के पीछे क्या प्रेरणा है? –

उत्तर

17

यदि आप सीमा को [0, 1] में बदलना चाहते हैं, तो सुनिश्चित करें कि आउटपुट डेटा प्रकार float है।

image = cv2.imread("lenacolor512.tiff", cv2.IMREAD_COLOR) # uint8 image 
norm_image = cv2.normalize(image, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F) 
+3

पायथन ने मुझे एक डीएसटी इनपुट पैरामीटर निर्दिष्ट करने की आवश्यकता है। इस मामले में, आप छवि की एक प्रति को norm_image प्रारंभ करना चाहते हैं और इसे dst में पास कर सकते हैं। – ckirksey3

+1

@ ckirksey3 आप बस 'कोई नहीं' को 'dst' के रूप में पास करते हैं। कोड की एक अतिरिक्त पंक्ति जोड़ने कोई बिंदु नहीं। –

7

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

+2

तो NORM_MINMAX में वास्तव में क्या होता है? –

+1

न्यूनतम पिक्सेल मान न्यूनतम आउटपुट मान (अल्फा) में मैप किया जाएगा, और अधिकतम पिक्सेल मान अधिकतम आउटपुट मान (बीटा) में मैप किया जाएगा। मैं बीच में सबकुछ के लिए रैखिक स्केलिंग के साथ विश्वास करता हूं। – rsaxvc