OpenCV सीखें — कंप्यूटर विज़न की पूरी गाइड (हिंदी)

इस सेक्शन में हम समझेंगे कि कंप्यूटर विज़न क्या है, OpenCV क्यों उपयोगी है और आप इस गाइड से क्या-क्या सीखेंगे — बेसिक से लेकर प्रैक्टिकल प्रोजेक्ट्स तक। यह कंटेंट विशेष रूप से हिंदी भाषी छात्रों और शुरुआती डेवलपर्स के लिए डिज़ाइन किया गया है।

  • 🔹 OpenCV परिचय
  • 🔹 इंस्टॉलेशन & सेटअप
  • 🔹 इमेज प्रोसेसिंग
  • 🔹 ऑब्जेक्ट डिटेक्शन

यह ब्लॉग SEO‑ऑप्टिमाइज़्ड है — हमने की-फ्रेज़ “OpenCV कंप्यूटर विज़न हिंदी में” और उससे जुड़े वेरिएंश को हेडिंग्स और पैराग्राफ में नेचुरली शामिल किया है।

शुरू करें — इंस्टॉलेशन देखें
Tip: ब्लॉग में दिए गए कोड बॉक्स और इमेजेस को डाउनलोड करके आप तुरंत प्रैक्टिस कर सकते हैं — हर कोड स्निपेट के साथ एक छोटा व्यावहारिक प्रोजेक्ट भी दिया गया है।
Computer Vision - OpenCV illustration

कंप्यूटर विज़न — संक्षेप में

कंप्यूटर विज़न वह क्षेत्र है जहाँ मशीनों को इमेज और वीडियो से जानकारी निकालना सिखाया जाता है — जैसे कि चेहरा पहचानना, वस्तु को गिनना, या किसी दृश्य में बदलती वस्तुओं का पता लगाना। OpenCV (Open Source Computer Vision Library) इस क्षेत्र का सबसे लोकप्रिय टूलकिट है, जो तेज़ और प्रभावी इमेज/वीडियो प्रोसेसिंग के लिए प्रयोग होता है।

आपको इस सेक्शन से क्या मिलेगा

  1. OpenCV और कंप्यूटर विज़न का सरल और प्रैक्टिकल परिचय।
  2. इंस्टॉलेशन के आसान स्टेप्स और पहला कोड (Python)।
  3. इमेज प्रोसेसिंग के फ़ंडामेंटल्स — थ्रेशोल्डिंग, एज डिटेक्शन, कंटूरिंग।
  4. छोटे प्रोजेक्ट आइडियाज जिन्हें आप तुरंत बना सकेंगे।

Section 2 — OpenCV इंस्टॉलेशन & पहला कोड (Python)

यह सेक्शन आसान स्टेप्स में बताएगा कि कैसे अपने सिस्टम पर OpenCV सेटअप करें और तुरंत अपना पहला प्रोग्राम चलाएँ — ताकि आप इमेज प्रोसेसिंग की प्रैक्टिस तुरंत शुरू कर सकें।

स्टेप 1 — वर्चुअल एनवायर्नमेंट बनाएं (सिफारिश)

# Windows
python -m venv venv
venv\Scripts\activate

# macOS / Linux
python3 -m venv venv
source venv/bin/activate

स्टेप 2 — OpenCV इंस्टॉल करें

सबसे बेसिक और स्टेबल पैकेज:

pip install opencv-python
# अगर आपको contrib मॉड्यूल चाहिए:
pip install opencv-contrib-python

स्टेप 3 — अतिरिक्त टूल्स (सिफारिश)

Jupyter और image display के लिए:

pip install jupyterlab matplotlib numpy

पहला कोड — इमेज पढ़ें और दिखाएँ (Python)

यह छोटा सा स्निपेट दिखाता है कैसे OpenCV से इमेज पढ़ते और दिखाते हैं।

import cv2

# इमेज पाथ बदलें
img = cv2.imread('Computer-Vision.jpg')
# विंडोज़ पर BGR से RGB में कन्वर्ट करने की जरूरत केवल matplotlib के लिए
cv2.imshow('Preview - OpenCV', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

नोट: अगर आप Jupyter Notebook में हैं तो cv2.imshow सही काम नहीं करेगा — उस केस में matplotlib का उपयोग करें:

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('Computer-Vision.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.axis('off')
plt.show()
Troubleshoot:
  • “ModuleNotFoundError: No module named ‘cv2′” — सुनिश्चित करें कि आपका वर्चुअल एनवायर्नमेंट सक्रिय है।
  • cv2.imshow खुलते ही फ्रीज हो जाए — अपने display ड्राइवर/GUI बैकएंड की जाँच करें या matplotlib का उपयोग करें।

SEO नोट्स — इस सेक्शन के लिए

मैंने इस सेक्शन में कीवर्ड्स नेचुरली शामिल किए हैं: OpenCV इंस्टॉलेशन, OpenCV Python, OpenCV Jupyter — ताकि सर्च इंजन को स्पष्ट संकेत मिले कि यह पेज इंस्टॉलेशन और शुरुआती गाइड के लिए उपयुक्त है।

Section 3 — इमेज प्रोसेसिंग के मूल सिद्धांत

इस सेक्शन में हम OpenCV की सबसे ज़रूरी इमेज‑प्रोसेसिंग तकनीकों को आसान हिंदी में समझाएंगे — साथ में छोटे कोड स्निपेट और व्यावहारिक टिप्स भी मिलेंगे जिससे आप तुरंत प्रयोग कर सकें।

1. इमेज पढ़ना, साइज और कलर स्पेस

OpenCV में इमेज पढ़ने पर वह BGR कलर स्पेस में आती है — matplotlib के साथ दिखाने से पहले हमें इसे RGB में कन्वर्ट करना चाहिए।

import cv2
img = cv2.imread('Computer-Vision.jpg')
print(img.shape)  # (height, width, channels)
# BGR -> RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

2. ग्रेस्केल और थ्रेशोल्डिंग

कई एल्गोरिदम ग्रेस्केल इमेज पर बेहतर काम करते हैं। थ्रेशोल्डिंग से आप इमेज को बाइनरी कर सकते हैं — जिससे ऑब्जेक्ट का पता लगाना आसान हो जाता है।

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# adaptive threshold
adp = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                              cv2.THRESH_BINARY, 11, 2)

3. ब्लरिंग और नॉइज़ रिमूवल

साधारण नॉइज़ हटाने के लिए GaussianBlur और MedianBlur उपयोगी हैं।

blur = cv2.GaussianBlur(gray, (5,5), 0)
median = cv2.medianBlur(gray, 5)

4. एज डिटेक्शन (Canny)

Canny एज डिटेक्शन तेज़ और भरोसेमंद है — इसका उपयोग कंटूर फाइंडिंग से पहले किया जाता है।

edges = cv2.Canny(blur, 50, 150)
# contours के लिए:
contours, hierarchy = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

5. कंटूर और ऑब्जेक्ट डिटेक्शन

कंटूर का उपयोग ऑब्जेक्ट के आकार और स्थिति का पता लगाने के लिए किया जाता है। नीचे एक छोटा उदाहरण दिया गया है:

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area > 500:
        x,y,w,h = cv2.boundingRect(cnt)
        cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
प्रैक्टिकल टिप: छोटे‑छोटे इमेज के साथ प्रयोग करें (जैसे 640×480) ताकि डेवलपमेंट फ़ास्ट रहे और आप जल्दी परिणाम देख सकें।

SEO नोट्स — इस सेक्शन के लिए

इस सेक्शन में मैंने लक्ष्य कीवर्ड्स जैसे इमेज प्रोसेसिंग OpenCV हिंदी और संबंधित बोलियों को हेडिंग्स और कोड टिप्पणियों में रखा है — इससे यह सेक्शन उन यूज़र्स के लिए भी ट्रैफिक ले आएगा जो कोड स्निपेट खोजते हैं।

Section 4 — फीचर एक्सट्रैक्शन: कॉर्नर्स, SIFT और ORB

इमेज प्रोसेसिंग का अगला चरण है फीचर एक्सट्रैक्शन — यानी इमेज से महत्वपूर्ण बिंदु या पैटर्न निकालना। OpenCV में इसके लिए कई शक्तिशाली एल्गोरिदम हैं जो कंप्यूटर विज़न को और भी स्मार्ट बनाते हैं।

1️⃣ Harris Corner Detector

यह तरीका इमेज के कोनों को पहचानता है — जो कि ट्रैकिंग या रजिस्ट्रेशन जैसे कार्यों में बहुत उपयोगी हैं।

import cv2
import numpy as np

img = cv2.imread('Computer-Vision.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)

img[dst>0.01*dst.max()] = [0,0,255]
cv2.imshow('Corners', img)
cv2.waitKey(0)
    

2️⃣ SIFT (Scale-Invariant Feature Transform)

SIFT एक क्लासिक और बहुत पॉपुलर एल्गोरिदम है जो अलग-अलग स्केल या एंगल पर भी फीचर पहचान सकता है। ध्यान दें कि यह opencv-contrib-python पैकेज में आता है।

import cv2

img = cv2.imread('Computer-Vision.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
kp, des = sift.detectAndCompute(gray, None)
cv2.drawKeypoints(gray, kp, img)
cv2.imshow('SIFT Features', img)
cv2.waitKey(0)
    

3️⃣ ORB (Oriented FAST and Rotated BRIEF)

ORB एक तेज़ और ओपन-सोर्स विकल्प है जो रियल-टाइम एप्लिकेशन्स में अच्छा प्रदर्शन देता है।

orb = cv2.ORB_create()
kp, des = orb.detectAndCompute(gray, None)
cv2.drawKeypoints(gray, kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('ORB Features', img)
cv2.waitKey(0)
    
💡 टिप: फीचर-डिटेक्शन करते समय हमेशा इमेज का साइज छोटा रखें (480p या 720p) ताकि प्रोसेसिंग तेज़ रहे।
और अलग-अलग एल्गोरिदम के बीच परिणाम की तुलना करना न भूलें।

SEO नोट्स

इस सेक्शन में लक्षित कीवर्ड्स जैसे OpenCV फीचर एक्सट्रैक्शन, SIFT हिंदी, ORB डिटेक्शन और Computer Vision features को नेचुरल रूप में जोड़ा गया है ताकि यह सेक्शन कोड-केंद्रित सर्च में भी रैंक कर सके।

Section 5 — ऑब्जेक्ट डिटेक्शन और ट्रैकिंग (वीडियो के साथ)

इस सेक्शन में आप सीखेंगे कि कैसे OpenCV का उपयोग करके वीडियो/वेबकैम से ऑब्जेक्ट डिटेक्ट और रियल-टाइम में उन्हें ट्रैक किया जाता है — सरल Haar Cascade से लेकर आधुनिक Deep-Learning बेस्ड तरीकों तक।

1️⃣ बेसिक: Haar Cascade बेस्ड डिटेक्शन (फेस डिटेक्शन)

Haar Cascades तेज़ और CPU-friendly हैं — शुरुआती प्रोजेक्ट्स के लिए सबसे उपयुक्त।

import cv2

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

    for (x,y,w,h) in faces:
        cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)

    cv2.imshow('Face Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
    

2️⃣ मोशन-बेस्ड डिटेक्शन (सिंपल ढांचा)

बैकग्राउंड सब्ट्रैक्शन से किसी फ़्रेम में मूवमेंट का पता लगाया जा सकता है — उपयोगी CCTV/स्मार्ट कैमरा एप्लिकेशन्स में।

import cv2

cap = cv2.VideoCapture('video.mp4')
fgbg = cv2.createBackgroundSubtractorMOG2()

while True:
    ret, frame = cap.read()
    if not ret:
        break
    fgmask = fgbg.apply(frame)
    cv2.imshow('Motion', fgmask)
    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
    

3️⃣ ट्रैकिंग: OpenCV के Trackers (KCF, CSRT)

एक बार ऑब्जेक्ट डिटेक्ट हो जाए, तो आप उसे ट्रैक करने के लिए विभिन्न ट्रैकर्स का उपयोग कर सकते हैं। CSRT अधिक सटीक, KCF तेज़ होता है।

import cv2

cap = cv2.VideoCapture(0)
ret, frame = cap.read()
bbox = cv2.selectROI('Select Object', frame, False)
tracker = cv2.TrackerCSRT_create()
tracker.init(frame, bbox)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    success, box = tracker.update(frame)
    if success:
        x,y,w,h = [int(v) for v in box]
        cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)
    cv2.imshow('Tracking', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
    

4️⃣ आधुनिक: Deep-Learning बेस्ड डिटेक्शन (YOLO/SSD)

YOLO (You Only Look Once) और SSD जैसे मॉडल रियल-टाइम में तेज़ और सटीक ऑब्जेक्ट डिटेक्शन देते हैं। OpenCV के DNN मॉड्यूल से आप प्री-ट्रेंड मॉडल लोड करके इस्तेमाल कर सकते हैं।

# संक्षेप में उदाहरण (डिटेल्ड कोड ब्लॉग के आगे के सेक्शंस में)
net = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights')
blob = cv2.dnn.blobFromImage(frame, 1/255.0, (416,416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward(get_output_layers(net))
# फिर आउट्स को पार्स कर बॉक्सेस बनाएं
    
प्रैक्टिकल टिप: अगर आपका मकसद रियल-टाइम प्रदर्शन है तो:
  • मॉडल का साइज कम रखें (Tiny-YOLO) या हल्के ट्रैकर्स चुनें (KCF)।
  • प्रोसेसिंग के लिए GPU का उपयोग करें—NVIDIA-CUDA सपोर्ट वाला OpenCV बनाएं या ONNX/TensorRT का उपयोग करें।

Section 6 — OpenCV + Deep Learning का मिलाप

अब समय है OpenCV को Deep Learning के साथ जोड़ने का — ताकि आप साधारण इमेज प्रोसेसिंग से आगे बढ़कर रियल-टाइम AI-पावर्ड कंप्यूटर विज़न एप्लिकेशन बना सकें। नीचे कुछ प्रमुख उदाहरण दिए गए हैं।

1️⃣ DNN मॉड्यूल से प्री-ट्रेंड मॉडल लोड करना

OpenCV का cv2.dnn मॉड्यूल TensorFlow, Caffe और Darknet मॉडल्स को डायरेक्ट लोड कर सकता है।

import cv2

# YOLOv3 model लोड करें
net = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights')
classes = [line.strip() for line in open('coco.names')]

# इमेज को नेटवर्क इनपुट के लिए तैयार करें
img = cv2.imread('street.jpg')
blob = cv2.dnn.blobFromImage(img, 1/255.0, (416,416), swapRB=True, crop=False)
net.setInput(blob)

# आउटपुट लेयर्स से prediction लें
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
outs = net.forward(output_layers)
    

2️⃣ Prediction को पार्स करना और बॉक्स ड्रॉ करना

class_ids = []
confidences = []
boxes = []

for out in outs:
    for detection in out:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        if confidence > 0.5:
            center_x = int(detection[0]*img.shape[1])
            center_y = int(detection[1]*img.shape[0])
            w = int(detection[2]*img.shape[1])
            h = int(detection[3]*img.shape[0])
            x = int(center_x - w/2)
            y = int(center_y - h/2)
            boxes.append([x, y, w, h])
            confidences.append(float(confidence))
            class_ids.append(class_id)

indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
for i in indexes:
    x, y, w, h = boxes[i]
    label = str(classes[class_ids[i]])
    cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
    cv2.putText(img, label, (x, y-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)
    

3️⃣ CNN-आधारित फेस रिकॉग्निशन का संक्षेप परिचय

OpenCV DNN मॉड्यूल के साथ FaceNet या ResNet आधारित मॉडल्स लोड कर चेहरे की पहचान की जा सकती है।

# उदाहरण के लिए:
face_net = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'res10_300x300_ssd_iter_140000.caffemodel')
frame = cv2.imread('people.jpg')
(h, w) = frame.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300,300)), 1.0,
                             (300,300), (104.0, 177.0, 123.0))
face_net.setInput(blob)
detections = face_net.forward()
    

4️⃣ रियल-टाइम Inference GPU के साथ

OpenCV 4.5+ में CUDA सपोर्ट उपलब्ध है। इसे सक्रिय करने पर GPU एक्सेलेरेशन से FPS काफी बेहतर हो जाता है।

  • Build OpenCV with -D WITH_CUDA=ON
  • Use net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
  • And net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
💡 Tip: Deep Learning इंटीग्रेशन के लिए आप Lightweight मॉडल्स जैसे MobileNet SSD, YOLOv4-Tiny या EfficientDet-Lite का उपयोग कर सकते हैं ताकि CPU पर भी रियल-टाइम आउटपुट मिले।

Section 7 — प्रैक्टिकल प्रोजेक्ट्स (स्टेप-बाय-स्टेप)

नीचे 3 रियल-वर्ल्ड प्रोजेक्ट्स दिए गए हैं — हर प्रोजेक्ट के लिए संक्षिप्त वर्णन, कोड स्निपेट और प्रैक्टिकल टिप्स शामिल हैं ताकि आप कम समय में प्रोटोटाइप तैयार कर सकें।

🟢 Project 1 — फेस डिटेक्शन और बेसिक फेस रिकॉग्निशन

उद्देश्य: वेबकैम से फेस डिटेक्ट करें और छोटे डेटासेट पर फेस रिकॉग्निशन लागू करें। आसान और प्रैक्टिकल — शुरुआत के लिए परफेक्ट।

स्टेप्स (संक्षेप)

  1. Haar Cascade से फेस डिटेक्शन।
  2. हर व्यक्ति के चेहरे के कई सैम्पल इकट्ठा करें (50–100 इमेज)।
  3. LBPH या FaceNet-based embeddings से मॉडल ट्रेन करें।
  4. रियल-टाइम में पहचानें और नाम दिखाएँ।

कोड — LBPH बेसिक उदाहरण

# ट्रेनिंग (सिंपल LBPH)
import cv2
import os
import numpy as np

detector = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
faces = []
labels = []
label = 0

for person_folder in os.listdir('dataset'):
    for file in os.listdir(os.path.join('dataset', person_folder)):
        img = cv2.imread(os.path.join('dataset', person_folder, file))
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        dets = detector.detectMultiScale(gray, 1.1, 4)
        for (x,y,w,h) in dets:
            faces.append(gray[y:y+h, x:x+w])
            labels.append(label)
    label += 1

recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(faces, np.array(labels))
recognizer.save('lbph_model.yml')
      

रियल-टाइम इनफरेंस

# रीयल-टाइम पहचान
recognizer.read('lbph_model.yml')
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    dets = detector.detectMultiScale(gray, 1.1, 4)
    for (x,y,w,h) in dets:
        face = gray[y:y+h, x:x+w]
        id_, conf = recognizer.predict(face)
        if conf < 60:
            name = "Person_"+str(id_)
        else:
            name = "Unknown"
        cv2.putText(frame, name, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)
        cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)
    cv2.imshow('Face Recognition', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
      
Tip: LBPH छोटे डेटासेट पर तेज़ और भरोसेमंद है। अगर सटीकता चाहिए तो FaceNet/ArcFace embeddings + SVM या cosine similarity प्रयोग करें।

🔵 Project 2 — ऑब्जेक्ट काउंटर (लोअर-कम्प्लेक्स स्टोरी)

उद्देश्य: वीडियो या स्ट्रीम में से किसी क्षेत्र से गुजरने वाली वस्तुओं (जैसे लोग/कार) को काउंट करना। उपयोगी स्टोर एनालिटिक्स और ट्रैफिक काउंटिंग के लिए।

लॉजिक (सरल)

  1. बैकग्राउंड सब्ट्रैक्शन (MOG2) से मूविंग ऑब्जेक्ट निकालें।
  2. कंटूर निकालकर फ़िल्टर (area threshold) करें।
  3. एक काउंटिंग ज़ोन (लाइन/रिजन) बनाएं और crossing events गिनें।

कोड — बेसिक काउंटर

import cv2

cap = cv2.VideoCapture('video.mp4')
fgbg = cv2.createBackgroundSubtractorMOG2(history=500, varThreshold=50)
count = 0
line_y = 300  # उदाहरण के लिए

while True:
    ret, frame = cap.read()
    if not ret:
        break
    fgmask = fgbg.apply(frame)
    _, thresh = cv2.threshold(fgmask, 244, 255, cv2.THRESH_BINARY)
    contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours:
        area = cv2.contourArea(cnt)
        if area > 1200:
            x,y,w,h = cv2.boundingRect(cnt)
            cx = x + w//2
            cy = y + h//2
            # अगर सेंटर line को cross करे तो count बढ़ाएँ (सरल लॉजिक)
            if cy < line_y + 5 and cy > line_y - 5:
                count += 1
            cv2.rectangle(frame, (x,y), (x+w, y+h), (255,0,0), 2)
    cv2.line(frame, (0,line_y), (frame.shape[1], line_y), (0,255,0), 2)
    cv2.putText(frame, f'Count: {count}', (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
    cv2.imshow('Counter', frame)
    if cv2.waitKey(30) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
      
Tip: काउंटर की रॉबस्टनेस बढ़ाने के लिए tracking (Simple SORT) और object-reid techniques जोड़ें ताकि डुप्लिकेट काउंट कम हों।

🔴 Project 3 — AR Overlay (Marker-based या Feature Homography)

उद्देश्य: किसी रियल-वर्ल्ड मार्कर/इमेज पर डिजिटल ऑब्जेक्ट (जैसे लोगो, 3D overlay) रेंडर करना। यह AR-प्रोजेक्ट छोटे पोर्टफोलियो के लिए शानदार है।

सरल तरीका (ORB + Homography)

import cv2
import numpy as np

# रिफरेंस इमेज (marker) और ओवरले इमेज लोड करें
marker = cv2.imread('marker.jpg', 0)
overlay = cv2.imread('overlay.png')

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(marker, None)

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    kp2, des2 = orb.detectAndCompute(gray, None)
    bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    if des2 is None:
        cv2.imshow('AR', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        continue
    matches = bf.match(des1, des2)
    matches = sorted(matches, key=lambda x: x.distance)[:30]
    if len(matches) > 10:
        src_pts = np.float32([kp1[m.queryIdx].pt for m in matches]).reshape(-1,1,2)
        dst_pts = np.float32([kp2[m.trainIdx].pt for m in matches]).reshape(-1,1,2)
        M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
        h,w = marker.shape
        pts = np.float32([[0,0],[0,h],[w,h],[w,0]]).reshape(-1,1,2)
        dst = cv2.perspectiveTransform(pts, M)
        # overlay को warp करें और frame पर blend करें (सिंपल तरीका)
        warp = cv2.warpPerspective(overlay, M, (frame.shape[1], frame.shape[0]))
        mask_overlay = (warp.sum(axis=2) > 0).astype(np.uint8)*255
        inv_mask = cv2.bitwise_not(mask_overlay)
        bg = cv2.bitwise_and(frame, frame, mask=inv_mask)
        fg = cv2.bitwise_and(warp, warp, mask=mask_overlay)
        frame = cv2.add(bg, fg)
    cv2.imshow('AR Overlay', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
      
Tip: मार्कर इमेज साफ और टेक्सचर-रिच होनी चाहिए ताकि ORB/SIFT अच्छे मैच दे। परफॉर्मेंस के लिए feature count और matching threshold एडजस्ट करें।

अभी क्या करें: इन प्रोजेक्ट्स में से किसी एक को चुनकर dataset तैयार करें और कोड को छोटे हिस्सों में रन करके टेस्ट करें — छोटे-छोटे सफल प्रयोग आपको तेज़ी से आगे बढ़ाते हैं।

निष्कर्ष — अब आपकी बारी है OpenCV मास्टर करने की!

आपने इस पूरी गाइड में देखा कि कैसे OpenCV और Computer Vision मिलकर मशीनों को “देखना” सिखाते हैं — इमेज प्रोसेसिंग से लेकर डीप लर्निंग और रियल-टाइम ऑब्जेक्ट ट्रैकिंग तक। अब यह आपके हाथ में है कि आप इन ज्ञान को अपने अगले प्रोजेक्ट में कैसे बदलते हैं।

🎯 अब क्या करें?

  • अपने पहले प्रोजेक्ट (Face Detection / Object Counter) पर तुरंत काम शुरू करें।
  • GitHub पर कोड अपलोड करें और README लिखें — यह आपके पोर्टफोलियो को मजबूत बनाएगा।
  • OpenCV के साथ TensorFlow / PyTorch इंटीग्रेशन सीखें और AI-ड्रिवन प्रोजेक्ट्स बनाएं।
  • हमारे अन्य ब्लॉग्स जैसे AI, ML, DL और NLP भी पढ़ें।

याद रखें: सबसे अच्छा तरीका सीखने का है — “करके देखना”। हर प्रोजेक्ट में कोड को समझें, बदलें और नए प्रयोग करें। यही असली मास्टरी है।


यह ब्लॉग पोस्ट Vista Academy द्वारा तैयार किया गया है — Dehradun की अग्रणी संस्था जो Data Analytics, AI, और Machine Learning में करियर बनाने वालों को प्रशिक्षित करती है।

Vista Academy – 316/336, Park Rd, Laxman Chowk, Dehradun – 248001
📞 +91 94117 78145 | 📧 thevistaacademy@gmail.com | 💬 WhatsApp
💬 Chat on WhatsApp: Ask About Our Courses