- 1. చిత్ర పరివర్తనాలు - అఫిన్ మరియు నాన్-అఫైన్ ట్రాన్స్ఫర్మేషన్
- 2. చిత్ర అనువాదాలు - చిత్రాన్ని పైకి, క్రిందికి, ఎడమ మరియు కుడికి కదిలించడం
- 3. చిత్రం యొక్క భ్రమణం - చిత్రాన్ని తిప్పడం
- 4. స్కేలింగ్, పున izing పరిమాణం మరియు ఇంటర్పోలేషన్
- 5. చిత్రం పిరమిడ్లు - పరిమాణాన్ని మార్చడానికి మరొక మార్గం
- 6. కత్తిరించడం - మీకు కావలసిన చిత్ర ప్రాంతాన్ని కత్తిరించడం
- 7. చిత్రాల ప్రకాశవంతం మరియు చీకటి కోసం అంకగణిత కార్యకలాపాలు
మునుపటి ట్యుటోరియల్లో, మేము ఓపెన్సివి గురించి నేర్చుకున్నాము మరియు బూడిద స్కేలింగ్, కలర్ సంతృప్తత, హిస్టోగ్రామ్, కలర్ స్పేస్లు, ఆర్జిబి కాంపోనెంట్ వంటి కొన్ని ప్రాథమిక ఇమేజ్ ప్రాసెసింగ్లను చేశాము. మునుపటి ట్యుటోరియల్లో చెప్పినట్లుగా, ఓపెన్సివి ఓపెన్ సోర్స్ కమ్యూటర్ విజన్ లైబ్రరీని కలిగి ఉంది సి ++, పైథాన్ మరియు జావా ఇంటర్ఫేస్లు మరియు విండోస్, లైనక్స్, మాక్ ఓఎస్, ఐఓఎస్ మరియు ఆండ్రాయిడ్కు మద్దతు ఇస్తాయి. కాబట్టి దీనిని పైథాన్ మరియు లైనక్స్ వాతావరణంతో రాస్ప్బెర్రీ పైలో సులభంగా ఇన్స్టాల్ చేయవచ్చు. ఫేస్ డిటెక్షన్, ఫేస్ లాక్, ఆబ్జెక్ట్ ట్రాకింగ్, కార్ నంబర్ ప్లేట్ డిటెక్షన్, హోమ్ సెక్యూరిటీ సిస్టమ్ వంటి అనేక నిజ-సమయ ఇమేజ్ ప్రాసెసింగ్ అనువర్తనాలను రూపొందించడానికి ఓపెన్సివి మరియు అటాచ్డ్ కెమెరాతో రాస్ప్బెర్రీ పై ఉపయోగపడుతుంది.
ఈ ట్యుటోరియల్లో, ఓపెన్సివిని ఉపయోగించి చిత్రాన్ని ఎలా మార్చాలో చూడబోతున్నాం. ఓపెన్సివిని ఉపయోగించి చిత్రంపై కింది ఫంక్షన్ను వర్తింపచేయడం ఇక్కడ నేర్చుకుంటాము:
- చిత్ర పరివర్తనాలు - అఫిన్ మరియు నాన్-అఫైన్ ట్రాన్స్ఫర్మేషన్
- చిత్ర అనువాదాలు - చిత్రాన్ని పైకి, క్రిందికి, ఎడమ మరియు కుడికి కదిలించడం
- చిత్రం యొక్క భ్రమణం - చిత్రాన్ని స్పిన్నింగ్
- స్కేలింగ్, పున izing పరిమాణం మరియు ఇంటర్పోలేషన్
- చిత్రం పిరమిడ్లు - పరిమాణాన్ని మార్చడానికి మరొక మార్గం
- కత్తిరించడం - మీకు కావలసిన చిత్ర ప్రాంతాన్ని కత్తిరించడం
- చిత్రాల ప్రకాశవంతం మరియు చీకటి కోసం అంకగణిత కార్యకలాపాలు
1. చిత్ర పరివర్తనాలు - అఫిన్ మరియు నాన్-అఫైన్ ట్రాన్స్ఫర్మేషన్
పరివర్తనాలు ఒక చిత్రంపై అమలు చేయబడిన రేఖాగణిత వక్రీకరణలు, ఇక్కడ వక్రీకరణలు ఖచ్చితంగా తప్పులు కాదు, చిత్రం సంగ్రహించబడిన స్థానం నుండి ఉత్పన్నమయ్యే దృక్పథ సమస్యలను సరిదిద్దడానికి ఒక దిద్దుబాటు రకం. చిత్ర పరివర్తనలో రెండు రకాలు ఉన్నాయి - అఫిన్ మరియు నాన్-అఫిన్
అఫిన్ ట్రాన్స్ఫర్మేషన్స్ స్కేలింగ్, రొటేషన్ మరియు ట్రాన్స్లేషన్ అనే మూడు రకాలు, అఫిన్ ట్రాన్స్ఫర్మేషన్స్ లో ముఖ్యమైన విషయం ఏమిటంటే ఇమేజ్ ట్రాన్స్ఫర్మేషన్స్ ముందు మరియు తరువాత పంక్తులు సమాంతరంగా ఉంటాయి.
నాన్-అఫైన్ ట్రాన్స్ఫర్మేషన్స్ లేదా ప్రొజెక్టివ్ ట్రాన్స్ఫర్మేషన్స్ సమాంతరత, పొడవు లేదా కోణాన్ని సంరక్షించవు, అయితే ఇది కోలినియారిటీ మరియు సంఘటనలను సంరక్షిస్తుంది, కోలినియారిటీ అంటే రెండు పాయింట్లు ఒకే సరళ రేఖలో ఉంటాయి.
నాన్-అఫైన్ పరివర్తనాలు కంప్యూటర్ దృష్టిలో చాలా సాధారణం మరియు వివిధ కెమెరా కోణాల నుండి ఉత్పత్తి చేయబడతాయి. నాన్-అఫిన్ లేదా ప్రొజెక్టివ్ ట్రాన్స్ఫర్మేషన్స్ ను హోమోగ్రఫీ అంటారు.
2. చిత్ర అనువాదాలు - చిత్రాన్ని పైకి, క్రిందికి, ఎడమ మరియు కుడికి కదిలించడం
మేము ఒకేసారి x మరియు y అనువాదాన్ని అమలు చేస్తే చిత్ర అనువాదం చిత్రాన్ని పైకి, క్రిందికి, ఎడమ మరియు కుడికి మరియు వికర్ణంగా కూడా కదిలిస్తుంది.
ఇప్పుడు చిత్ర అనువాదాలను నిర్వహించడానికి మేము ఓపెన్సివి యొక్క వార్ప్ఆఫిన్ ఫంక్షన్ను ఉపయోగిస్తాము, ఈ అనువాదాలను అమలు చేయడానికి cv2.warpAffine ఉపయోగించబడుతుంది, కాని దీనికి మనకు అనువాద మాతృక అవసరం.
అనువాద మాతృక, T = 1 0 Tx
0 1 టై
T X, T y అనేది ఇమేజ్ షిఫ్టులు జరిగే దిశలు.
దీనిలో T X X- అక్షం (క్షితిజసమాంతర) వెంట మారుతుంది
T Y అనేది Y- అక్షం (లంబ) వెంట మార్పు
# ఇది చిత్రం యొక్క స్థానాన్ని మార్చే అఫిన్ పరివర్తన # ఈ పరివర్తనలను అమలు చేయడానికి మేము cv2.warpAffine ని ఉపయోగిస్తాము. cv2 దిగుమతి సంఖ్యను np image = cv2.imread ('input.jpg') # చిత్ర ఎత్తు యొక్క ఎత్తు మరియు వెడల్పు , వెడల్పు = image.shape print (image.shape) quater_height, quater_width = height / 4, width / 4 T = np.float32 (,]) img_translation = cv2.warpAffine (చిత్రం, T, (వెడల్పు, ఎత్తు)) ముద్రణ (T) cv2.imshow ('original_image', చిత్రం) cv2.nightKey (0) cv2.imshow (' అనువాదం ', img_translation) cv2.nightKey (0) cv2.destroyAllWindows ()
కన్సోల్ అవుట్పుట్ - (183, 275) - ఎత్తు మరియు వెడల్పు
- టి మ్యాట్రిక్స్
]
3. చిత్రం యొక్క భ్రమణం - చిత్రాన్ని తిప్పడం
చిత్రం యొక్క భ్రమణం ఒక బిందువు లేదా చిత్రానికి మధ్యలో ఉన్న బిందువు గురించి భ్రమణ బిందువు పైవట్ లాగా పనిచేస్తుంది.
అనువాదంలో మనకు T మాతృక ఉంది, భ్రమణంలో మనకు M మాతృక ఉంటుంది
భ్రమణ మాతృక, M మాతృక = Cosθ -Sinθ
సినా కోస్
Θ అనేది భ్రమణ కోణం, ఇది సవ్యదిశలో వ్యతిరేక దిశలో కొలుస్తారు.
Cv2.getRotationMatrix2D (rotation_center_x, rotation_center_y, భ్రమణ కోణం, స్కేల్) ఉపయోగించి ఫంక్షన్ను ఒకే సమయంలో విక్రయించడానికి మరియు తిప్పడానికి ఓపెన్సివి మిమ్మల్ని అనుమతిస్తుంది.
చిత్రం యొక్క భ్రమణాన్ని పొందడానికి మేము ఇప్పటికీ ఓపెన్సివి యొక్క వార్ప్ఆఫిన్ ఫంక్షన్ను ఉపయోగిస్తాము కాని మునుపటి సందర్భంలో మాదిరిగానే అనువాద మాతృకకు బదులుగా ఇక్కడ మేము భ్రమణ మాతృకను ఉపయోగిస్తాము.
cv2 దిగుమతి నంపీని np image = cv2.imread ('input.jpg') ఎత్తు, వెడల్పు = image.shape # దాని కేంద్రం గురించి చిత్రాన్ని తిప్పడానికి ఎత్తు మరియు వెడల్పును 2 ద్వారా విభజించండి భ్రమణం_మాట్రిక్స్ = cv2.getRotationMatrix2D ((వెడల్పు / 2, ఎత్తు / 2), 90,1) rotated_image = cv2.warpAffine (చిత్రం, rotation_matrix, (వెడల్పు, ఎత్తు)) cv2.imshow ('అసలు చిత్రం' చిత్రం) cv2.waitKey (0) cv2.imshow ('తిప్పిన చిత్రం ', రొటేటెడ్_ఇమేజ్) cv2.nightKey (0) cv2.destroyAllWindows ()
ఇప్పుడు చిత్రం 90 డిగ్రీల ద్వారా తిప్పబడింది, కాన్వాస్ పరిమాణం కారణంగా కత్తిరించబడింది, ఎందుకంటే కాన్వాస్ పరిమాణం ఒకే విధంగా ఉంటుంది, కానీ భ్రమణ చిత్రం పరిమాణం కాన్వాస్ పరిమాణానికి సరిపోదు. స్కేలింగ్ కారకాన్ని ప్రతికూలంగా సెట్ చేయడం ద్వారా దీన్ని సర్దుబాటు చేయవచ్చు, కానీ ఇది చిత్రం వెనుక నల్లని నేపథ్యాన్ని అనుమతిస్తుంది.
కాబట్టి మీరు చిత్రం యొక్క ఎత్తు మరియు వెడల్పును or హించడం ద్వారా లేదా ess హించడం ద్వారా సెట్ చేయవచ్చు లేదా చిత్రాన్ని తిప్పడం ద్వారా మరొక పద్దతి ఉంది, దానిని ట్రాన్స్పోజ్ చేయడం ద్వారా ఉంటుంది, అయితే ఇది 90 డిగ్రీల గుణకారాల ద్వారా వ్యతిరేక సవ్యదిశలో తిరుగుతుంది.
4. స్కేలింగ్, పున izing పరిమాణం మరియు ఇంటర్పోలేషన్
స్కేలింగ్ మరియు పున izing పరిమాణం అఫిన్ ట్రాన్స్ఫర్మేషన్స్, ఇమేజ్ యొక్క పరిమాణాన్ని మార్చడం మేము చాలా సమయం చేసాము మరియు మేము ఇంటర్పోలేషన్తో కూడా వ్యవహరించాము, మీరు పిక్సెల్స్ విస్తరిస్తున్న పెద్ద పరిమాణానికి మీరు చిత్రాన్ని పున izing పరిమాణం చేస్తున్నప్పుడు, కొన్ని ఖాళీలు ఉన్నాయి పిక్సెల్స్ మరియు అక్కడే ఇంటర్పోలేషన్ వస్తుంది.
చిత్ర పరిమాణాన్ని చిన్న నుండి పెద్దదిగా పెంచడం లేదా చిత్ర పరిమాణాన్ని పెద్ద నుండి చిన్నదిగా తగ్గించడం ద్వారా ఇది సంభవించవచ్చు.
సాంకేతికంగా, ఇంటర్పోలేషన్ అనేది తెలిసిన డేటా పాయింట్ల వివిక్త సమితిలో, కొత్త డేటా పాయింట్లను (పిక్సెల్లు) నిర్మించే పద్ధతి.
ఉన్నాయి అంతర్వేశనం పద్ధతులు వివిధ రకాల లో OpenCV వంటి
cv2.INTER_AREA - మాదిరిని కుదించడానికి లేదా తగ్గించడానికి మంచిది
cv2.INTER_NEAREST - వేగవంతమైనది
cv2.LINEAR - జూమ్ చేయడానికి లేదా నమూనా చేయడానికి మంచిది (డిఫాల్ట్)
cv2.CUBIC - మంచిది
cv2.INTER_LANCZOS4 - ఉత్తమమైనది
cv2.resize ఫంక్షన్ను ఉపయోగించి # పున izing పరిమాణం చాలా సులభం, దాని వాదనలు # cv2.resize (image, dsize (output image size), x_scale, y_scale, interpolation) దిగుమతి cv2 import numpy as np image = cv2.imread ('input. jpg ') cv2.imshow (' Original_image ', చిత్రం) cv2.waitKey (0) # యొక్క చిత్రం 3/4 అసలు చిత్రం పరిమాణం అంటే 75% క్రిందికి ప్రమాణాల చేయడానికి వీలు image_scaled = cv2.resize (చిత్రం, ఎవరూ, FX = 0.75, fy = 0.75) # ఓపెన్ సివికి లీనియర్ ఇంటర్పోలేషన్ డిఫాల్ట్ పద్ధతి కాబట్టి మనం దీన్ని ఫంక్షన్గా అమలు చేయవలసిన అవసరం లేదు. cv2.imshow ('scaling_linear అంతర్వేశనం', image_scaled) cv2.waitKey (0) # లెట్ యొక్క డబుల్ మా చిత్రం యొక్క పరిమాణం img_double = cv2.resize (చిత్రం, ఎవరూ, FX = 2, FY = 2, అంతర్వేశనం = cv2.INTER_CUBIC) cv2.imshow ('scaing_cubicInterpolation', img_double) cv2.waitKey (0) # వీలు యొక్క ఖచ్చితమైన కొలతలు ద్వారా పునఃపరిమాణం చేయుటకు image_resize cv2.resize = (చిత్రం, (200,300), అంతర్వేశనం = cv2.INTER_AREA) cv2.imshow ('scaling_exact', image_resize) cv2.nightKey (0) cv2.destroyAllWindows ()
5. చిత్రం పిరమిడ్లు - పరిమాణాన్ని మార్చడానికి మరొక మార్గం
పిరమిడింగ్ ఇమేజ్ ఉన్నత స్థాయి (చిత్రాలను విస్తరించడం) లేదా డౌన్స్కేలింగ్ (కుదించే చిత్రాలు) గా సూచిస్తుంది.
ఇది పున izing పరిమాణం యొక్క వేరే మార్గం, ఇది చిత్రాలను సులభంగా మరియు త్వరగా స్కేల్ చేయడానికి అనుమతిస్తుంది, కొత్త చిత్రం యొక్క ఎత్తు మరియు వెడల్పును సగానికి తగ్గించడం.
ప్రతిసారీ ఒక వస్తువు కోసం చూస్తున్నప్పుడు చిత్రాలను స్కేల్ చేసే ఆబ్జెక్ట్ డిటెక్టర్లను తయారుచేసేటప్పుడు ఇది ఉపయోగపడుతుంది.
దిగుమతి cv2 image = cv2.imread ('input.jpg') small = cv2.pyrDown (చిత్రం) పెద్దది = cv2.pyrUp (చిన్నది) cv2.imshow ('అసలు', చిత్రం) cv2.nightKey (0) cv2.imshow ('చిన్నది', చిన్నది) cv2.waitKey (0) cv2.imshow ('పెద్దది', పెద్దది) cv2.nightKey (0) cv2.destroyAllWindows ()
పెద్ద చిత్రంలో మీరు ఇప్పటికీ అసలు చిత్రం యొక్క అదే పరిమాణంలో ఉండటం దాని చిన్న అస్పష్టంగా ఉన్నందున మీరు గమనించవచ్చు ఎందుకంటే ఇది చిన్న చిత్రం నుండి పెద్ద చిత్రానికి నేరుగా మార్చబడుతుంది. మేము దానిని ఇంటర్పోలేట్ చేస్తే ఇమేజ్ నాణ్యత మునుపటి మాదిరిగానే మెరుగుపడుతుంది ఎందుకంటే ఇమేజ్ విస్తరించినప్పుడు ఖాళీలను నింపేటప్పుడు ఇంటర్పోలేషన్ పిక్సెల్లను అంచనా వేస్తుంది.
ఇప్పుడు అదే కోడ్ను నడుపుతున్నప్పటికీ క్యూబిక్ ఇంటర్పోలేషన్తో పెద్ద చిత్రం యొక్క మంచి నాణ్యతను ఇస్తుంది. చిత్రాల క్రింద అసలు చిత్రం, అప్ స్కేల్డ్ ఇమేజ్, చిన్న ఇమేజ్ మరియు క్యూబిక్ ఇంటర్పోలేటెడ్ వెర్షన్ మధ్య పోలిక చూపిస్తుంది.
దిగుమతి cv2 image = cv2.imread ('input.jpg') small = cv2.pyrDown (చిత్రం) పెద్దది = cv2.pyrUp (చిన్నది) cv2.imshow ('అసలైన', చిత్రం) cv2.nightKey (0) cv2.imshow ('చిన్నది', చిన్నది) cv2. WaitKey (0) cv2.imshow ('పెద్దది', పెద్దది) cv2.nightKey (0) # క్యూబిక్ ఇంటర్పోలేషన్ ఉపయోగించి చిన్న చిత్రం నుండి మార్చబడిన పెద్ద చిత్రం యొక్క నాణ్యతను పెంచుతుంది img_double = cv2.resize (చిన్నది, ఏదీ లేదు, fx = 2, fy = 2, ఇంటర్పోలేషన్ = cv2.INTER_CUBIC) cv2.imshow ('scaing_cubicInterpolation', img_double) cv2.nightKey (0) cv2.destroyAllWindows ()
గమనిక: మీరు చిత్రాలను బహుళ చిన్న కాపీలు, నిరంతరం పరిమాణంలో పెరుగుతున్న పరిమాణం లేదా చిత్రాల బహుళ పెద్ద కాపీలు లో చిన్నది వెళ్లి అప్పుడు మేము ఉపయోగించవచ్చు సృష్టించడానికి కావాలా కోసం లేదా ఉచ్చులు అయితే ఉచ్చులు లోపల ఉంచడం pyrDown లేదా pyrUp ఫంక్షన్.
6. కత్తిరించడం - మీకు కావలసిన చిత్ర ప్రాంతాన్ని కత్తిరించడం
చిత్రాలను కత్తిరించడం అనేది చిత్రం యొక్క ఒక విభాగాన్ని సంగ్రహించడం.
ఓపెన్సివికి నేరుగా క్రాపింగ్ ఫంక్షన్ లేదు, అయితే ఈ క్రింది కోడ్ను ఉపయోగించి నంపీ ద్వారా సులభంగా చేయవచ్చు
కత్తిరించిన = చిత్రం
మేము ఇమేజ్ శ్రేణిని ఉంచాము మరియు ఇండెక్సింగ్ టూల్స్ లేదా పద్దతిని నంపీలో ఉపయోగిస్తాము, మేము ప్రారంభ వరుసను ఎండ్ అడ్డు వరుసకు నిర్వచించాము మరియు చిత్రాన్ని కామాతో వేరుచేసిన కాలమ్ నుండి ఎండ్ కాలమ్ను వేరుచేస్తాము, అది చిత్రాన్ని పొందడానికి మేము కత్తిరించాలనుకుంటున్న దీర్ఘచతురస్రాన్ని సంగ్రహిస్తుంది.
cv2 దిగుమతి సంఖ్యను np image = cv2.imread ('input.jpg') ఎత్తు, వెడల్పు = image.shape # ప్రారంభ పిక్సెల్ కోఆర్డినేట్లను (పంట దీర్ఘచతురస్రానికి ఎగువ ఎడమవైపు ) ప్రారంభిద్దాం., int (వెడల్పు *.25) # ముగింపు పిక్సెల్ కోఆర్డినేట్లను (దిగువ కుడి) end_row, end_col = int (ఎత్తు *.75), int (వెడల్పు *.75) # మనం కత్తిరించాలని కోరుకునే దీర్ఘచతురస్రాన్ని కత్తిరించడానికి ఇండెక్సింగ్ను ఉపయోగించండి = చిత్రం cv2.imshow ("అసలు చిత్రం", చిత్రం) cv2.waitKey (0) cv2.imshow ("కత్తిరించిన చిత్రం", కత్తిరించబడింది) cv2.nightKey (0) cv2.destroyAllWindows ()
మీరు స్టార్ట్_కోల్ లేదా స్టార్ట్_రోకు బదులుగా నేరుగా పిక్సెల్ విలువలను ఉపయోగించవచ్చని గమనించండి , అవి యూజర్ కోసం సులభంగా గుర్తించటానికి ఇవ్వబడ్డాయి.
7. చిత్రాల ప్రకాశవంతం మరియు చీకటి కోసం అంకగణిత కార్యకలాపాలు
ఓపెన్సివిలోని అంకగణిత కార్యకలాపాలు ప్రాథమికంగా చిత్రానికి మాతృకలను జోడించడం లేదా తీసివేయడం, మాతృకలను జోడించడం లేదా తీసివేయడం ప్రకాశం పెంచడం లేదా తగ్గడంపై ప్రభావం చూపుతుంది.
కాబట్టి మాతృకలను జోడించడానికి లేదా తీసివేయడానికి మనం వాటిని సృష్టించాలి మరియు నంపీకి np.ones అని పిలువబడే ఒక ఫంక్షన్ ఉంది, అది మన చిత్రానికి 1 యొక్క అదే పరిమాణంలోని మాతృకలను ఇస్తుంది.
cv2 దిగుమతి సంఖ్యను np image = cv2.imread ('input.jpg') గా దిగుమతి చేయండి # ఒకరి మాతృకను సృష్టించండి, తరువాత దానిని 100 యొక్క స్కేలర్ ద్వారా గుణించాలి. # np.ones మా చిత్రానికి సమానమైన పరిమాణంతో మాతృకను ఇస్తుంది ఈ సందర్భంలో విలువలు 100 గా ఉండటం M = np.ones (image.shape, dtype = "uint8") * 100 # మేము మాతృక M ని మా చిత్రానికి జోడించడానికి దీనిని ఉపయోగిస్తాము # ప్రకాశం పెరుగుదల గమనించండి = cv2.add (చిత్రం, ఎం) cv2.imshow ("చేర్చబడింది", జోడించారు) cv2.waitKey (0) మేము కూడా చెయ్యవచ్చు substract #likewise #notice ప్రకాశం తగ్గుదల తీసివేయటం = cv2.subtract (చిత్రం, ఎం) cv2.imshow ("వ్యవకలనం", తీసివేయటం) cv2.nightKey (0) cv2.destroyAllWindows ()
ఇమేజ్పై అనేక విభిన్న ఇమేజ్ ప్రాసెసింగ్ ఆపరేషన్లను వర్తింపచేయడానికి ఓపెన్సివిని ఈ విధంగా ఉపయోగించవచ్చు. మేము తదుపరి ట్యుటోరియల్లో ఇతర ఇమేజ్ మానిప్యులేషన్ ఫంక్షన్లతో కొనసాగుతాము.