شرح یک سری توابع:
# توابع پردازش تصویر در OpenCV (Pixel-level Operations)
## 1. **خواندن و نوشتن تصویر**
```python
import cv2
# خواندن تصویر
img = cv2.imread('image.jpg') # BGR format
# ذخیره تصویر
cv2.imwrite('output.jpg', img)
```
## 2. **دسترسی و تغییر پیکسلها**
```python
# دسترسی به مقدار پیکسل
pixel_value = img[y, x] # [B, G, R]
# تغییر پیکسل خاص
img[y, x] = [255, 0, 0] # آبی
# دسترسی به کانالهای رنگی
blue = img[y, x, 0]
green = img[y, x, 1]
red = img[y, x, 2]
```
## 3. **تبدیل فضای رنگی**
```python
# BGR به Grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# BGR به HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# BGR به RGB
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
```
## 4. **تغییر روشنایی و کنتراست**
```python
# روشنایی و کنتراست
alpha = 1.5 # کنتراست (1.0 = نرمال)
beta = 50 # روشنایی (0 = بدون تغییر)
adjusted = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
```
## 5. **عملیات آستانهگذاری (Thresholding)**
```python
# آستانهگذاری ساده
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# آستانهگذاری تطبیقی
adaptive = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)
# آستانهگذاری Otsu
_, otsu = cv2.threshold(gray, 0, 255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU)
```
## 6. **عملیات مورفولوژیک**
```python
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# فرسایش
eroded = cv2.erode(img, kernel)
# انبساط
dilated = cv2.dilate(img, kernel)
# باز کردن
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
# بستن
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
```
## 7. **فیلترهای تصویری**
```python
# فیلتر گوسی (تار کردن)
blur = cv2.GaussianBlur(img, (5,5), 0)
# فیلتر میانه
median = cv2.medianBlur(img, 5)
# فیلتر سوبل (لبهیابی)
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=5)
```
## 8. **عملیات حسابی روی پیکسلها**
```python
# جمع دو تصویر
added = cv2.add(img1, img2)
# تفریق دو تصویر
subtracted = cv2.subtract(img1, img2)
# ضرب اسکالر
multiplied = cv2.multiply(img, 1.5)
# ترکیب وزنی
blended = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)
```
## 9. **تشخیص لبه**
```python
# Canny Edge Detection
edges = cv2.Canny(gray, 100, 200) # threshold1, threshold2
# Laplacian
laplacian = cv2.Laplacian(gray, cv2.CV_64F)
```
## 10. **تغییر اندازه و چرخش**
```python
# تغییر اندازه
resized = cv2.resize(img, (new_width, new_height))
# چرخش
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1) # 45 درجه
rotated = cv2.warpAffine(img, M, (cols, rows))
```
## 11. **رسم روی تصویر**
```python
# خط
cv2.line(img, (x1,y1), (x2,y2), (0,255,0), thickness=2)
# مستطیل
cv2.rectangle(img, (x1,y1), (x2,y2), (255,0,0), thickness=2)
# دایره
cv2.circle(img, (center_x, center_y), radius, (0,0,255), thickness=-1)
# متن
cv2.putText(img, 'Hello', (x,y),
cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
```
## 12. **عملیات بیتی**
```python
# AND بیتی
bitwise_and = cv2.bitwise_and(img1, img2)
# OR بیتی
bitwise_or = cv2.bitwise_or(img1, img2)
# NOT بیتی
bitwise_not = cv2.bitwise_not(img)
# XOR بیتی
bitwise_xor = cv2.bitwise_xor(img1, img2)
```
## 13. **تقسیم و ادغام کانالها**
```python
# تقسیم کانالها
b, g, r = cv2.split(img)
# ادغام کانالها
merged = cv2.merge([b, g, r])
# ایجاد تصویر تک کاناله
zeros = np.zeros(img.shape[:2], dtype="uint8")
red_only = cv2.merge([zeros, zeros, r])
```
## 14. **هیستوگرام**
```python
# محاسبه هیستوگرام
hist = cv2.calcHist([gray], [0], None, [256], [0,256])
# تساوی هیستوگرام
equalized = cv2.equalizeHist(gray)
# CLAHE (Contrast Limited Adaptive Histogram Equalization)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
clahe_img = clahe.apply(gray)
```
## نکات مهم:
1. تصاویر در OpenCV به صورت **BGR** ذخیره میشوند (نه RGB)
2. مختصات به صورت **(x, y)** هستند (نه y, x)
3. برای کارایی بهتر از عملیات برداری استفاده کنید نه حلقههای تکی
4. از NumPy برای عملیات پیچیدهتر روی پیکسلها استفاده کنید
این توابع پایهای برای کار با پیکسلها در OpenCV هستند که میتوانند برای پردازش تصویر، بینایی کامپیوتر و کاربردهای یادگیری ماشین استفاده شوند.