投稿日:2025年2月8日

Basics of image processing programming using OpenCV4 and application to object recognition and object detection

Introduction to Image Processing with OpenCV4

OpenCV, short for Open Source Computer Vision Library, is a powerful tool used extensively in the world of computer vision and image processing.
It’s an open-source library that helps developers build programs and applications capable of performing various image processing tasks.
OpenCV4 is the latest iteration which comes with a plethora of features and improvements for handling images and video streams efficiently.

Image processing with OpenCV includes tasks such as reading and writing images, transforming images, and extracting useful information like edges, shapes, and colors.
With OpenCV, even beginners can start performing basic image manipulations and later progress to more advanced tasks like object recognition and detection.

Installing OpenCV4

Before diving into the capabilities of OpenCV, you need to have it installed on your system.
Installation is straightforward with several ways to achieve it depending on your operating system.

If you’re using Python, the easiest way is to install OpenCV using pip:

“`
pip install opencv-python
“`

For additional functionalities, such as the non-free algorithms:
“`
pip install opencv-contrib-python
“`

Once installed, you can begin to create image-processing applications leveraging the robust features of OpenCV4.

Basic Image Processing Tasks

Reading and Displaying Images

One of the primary tasks in image processing is to read and display images.
With OpenCV, this can be done using simple functions.

Here’s a quick example in Python:

“`python
import cv2

# Reading an image
image = cv2.imread(‘example.jpg’)

# Displaying the image in a window
cv2.imshow(‘Image’, image)

# Wait for a key press and close the displayed image
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

In the above code, `cv2.imread()` is used to read the image, while `cv2.imshow()` is used for displaying the image in a window.

Image Transformation

Transforming images is another critical task in image processing.
This can include resizing, rotating, and flipping images.

Resizing can be done using `cv2.resize()`:
“`python
resized_image = cv2.resize(image, (width, height))
“`

For rotating an image, you can use the `cv2.getRotationMatrix2D()` and `cv2.warpAffine()` functions:
“`python
(h, w) = image.shape[:2]
center = (w / 2, h / 2)

# Rotate the image by 45 degrees
rotation_matrix = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated_image = cv2.warpAffine(image, rotation_matrix, (w, h))
“`

Flipping an image can be straightforward with `cv2.flip()`:
“`python
# Flip around x-axis
flipped_image = cv2.flip(image, 0)
“`

Advanced Image Processing with OpenCV4

Edge Detection

Edge detection is a fundamental task in image processing where the aim is to identify points in a digital image where the image brightness changes sharply.
The Canny edge detector is a popular algorithm implemented in OpenCV for this purpose.

“`python
edges = cv2.Canny(image, threshold1, threshold2)
cv2.imshow(‘Edges’, edges)
“`

This process helps in identifying object boundaries within an image, making it easier to perform subsequent analysis tasks.

Object Recognition and Object Detection

Object recognition and detection are among the most sought-after abilities in computer vision, allowing machines to interpret their surroundings.
OpenCV4 supports various methods ranging from traditional techniques to modern deep learning approaches.

Object Recognition

Object recognition involves identifying objects in an image and labeling them accordingly.
For instance, recognizing a car in a photo and identifying it as such.

Techniques such as template matching or employing feature detectors like ORB (Oriented FAST and Rotated BRIEF) are often used.
For more accurate and robust recognition, integrating machine learning models trained with datasets like ImageNet can significantly enhance capabilities.

Object Detection

Object detection, unlike simple recognition, involves identifying the presence, location, and if possible, the extent of objects within an image.
OpenCV supports object detection through pre-trained deep learning models.

YOLO (You Only Look Once) or Single Shot Detectors (SSD) are often bundled with OpenCV, allowing for real-time object detection.

Here is a basic implementation using a pre-trained YOLO model in OpenCV:

“`python
# Load pre-trained YOLO model and classes
net = cv2.dnn.readNet(‘yolov3.weights’, ‘yolov3.cfg’)
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] – 1] for i in net.getUnconnectedOutLayers()]

# Load the input image
image = cv2.imread(‘input.jpg’)
height, width = image.shape[:2]

# Create a blob and set it as input to the network
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)

# Run forward pass and get output
detections = net.forward(output_layers)

for detection in detections:
for obj in detection:
scores = obj[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
# Convert to image coordinates
center_x = int(obj[0] * width)
center_y = int(obj[1] * height)
w = int(obj[2] * width)
h = int(obj[3] * height)

# Draw bounding box
x = center_x – (w // 2)
y = center_y – (h // 2)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
label = str(classes[class_id])
cv2.putText(image, label, (x, y – 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

cv2.imshow(‘Object Detection’, image)
cv2.waitKey(0)
“`

Conclusion

Image processing with OpenCV4 offers a vast realm of possibilities ranging from simple image manipulation to building sophisticated applications with capabilities like object recognition and detection.
Understanding these basics is the first step in harnessing the power of computer vision to solve real-world problems.
As you delve deeper, the OpenCV library provides ample documentation and community support to advance your skills in building dynamic and responsive computer vision solutions.

You cannot copy content of this page