opencv.org

import cv2
import numpy as np
import matplotlib.pyplot as plt
print("️ برنامه ساخت و نمایش تصویر - ویژه Pydroid 3")
print("=" * 50)
# 1. ساخت یک تصویر جذابتر
height, width = 400, 600
img = np.zeros((height, width, 3), dtype=np.uint8)
# پسزمینه گرادیان آبی
for x in range(width):
intensity = int((x / width) * 200)
img[:, x] = [200 - intensity, 100 + intensity, 50 + intensity]
# 2. اضافه کردن شکلهای هندسی
# ستاره زرد
star_points = np.array([
[300, 100], [320, 160], [380, 160], # نقاط ستاره
[330, 200], [350, 260], [300, 225],
[250, 260], [270, 200], [220, 160],
[280, 160]
])
cv2.fillPoly(img, [star_points], (0, 255, 255)) # زرد
# الگوی دایرههای توخالی
for i in range(5):
radius = 30 + i * 15
cv2.circle(img, (150, 300), radius, (255, 255, 255), 2)
# 3. اضافه کردن متن
texts = [
("OpenCV + Pydroid 3", (180, 50)),
("اندروید", (280, 350)),
("Matplotlib Display", (200, 380))
]
for text, position in texts:
cv2.putText(img, text, position, cv2.FONT_HERSHEY_SIMPLEX,
0.7, (255, 255, 255), 2)
# 4. ذخیره تصویر
filename = 'my_design.png'
cv2.imwrite(filename, img)
print(f"✅ تصویر ساخته شد: {filename}")
print(f" ابعاد: {width}x{height} پیکسل")
print(f" عمق رنگ: {img.dtype}")
print("-" * 50)
# 5. نمایش با matplotlib - راهحل اصلی برای اندروید
# تبدیل BGR به RGB برای نمایش صحیح
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 7))
plt.imshow(img_rgb)
plt.title('نمایش تصویر در Pydroid 3\n(با Matplotlib)',
fontsize=16, fontweight='bold', pad=20)
plt.axis('off')
# اضافه کردن توضیحات پایین تصویر
plt.figtext(0.5, 0.01,
f'فایل ذخیره شده: {filename} | ابعاد: {width}×{height}',
ha='center', fontsize=10, style='italic')
plt.tight_layout()
plt.show()
print(" تصویر با موفقیت نمایش داده شد!")
print("\n برای مشاهده فایل ذخیره شده:")
print("1. به منوی 'File' در Pydroid بروید")
print("2. فایل 'my_design.png' را پیدا کنید")
print("3. روی آن کلیک کنید تا باز شود")
import cv2
import numpy as np
import matplotlib.pyplot as plt
# ساخت تصویر
img = np.ones((300, 500, 3), dtype=np.uint8) * 255
# دایره
cv2.circle(img, (250, 150), 80, (0, 0, 255), 3) # قرمز
# متن
cv2.putText(img, "Circle + Text", (150, 280),
cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 0), 2)
# نمایش با matplotlib (برای Pydroid)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis('off')
plt.show()
cv2.imwrite('output.png', img)
print("✅ Image saved as 'output.png'")
import pygame
import sys
# مقداردهی اولیه Pygame
pygame.init()
# تنظیمات پنجره بازی
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("بازی مربع متحرک - کنترل با کلیدهای جهتدار")
# رنگها
RED = (255, 0, 0)
BLUE = (0, 120, 255)
BACKGROUND = (20, 20, 30)
# مشخصات مربع بازیکن
square_size = 50
player_x = WIDTH // 2 - square_size // 2
player_y = HEIGHT // 2 - square_size // 2
speed = 7
# حلقه اصلی بازی
clock = pygame.time.Clock()
running = True
while running:
# مدیریت رویدادها (مانند بستن پنجره)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# دریافت وضعیت کلیدهای فشرده شده
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
player_x += speed
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
player_x -= speed
if keys[pygame.K_DOWN] or keys[pygame.K_s]:
player_y += speed
if keys[pygame.K_UP] or keys[pygame.K_w]:
player_y -= speed
# جلوگیری از خروج مربع از مرزهای پنجره
player_x = max(0, min(WIDTH - square_size, player_x))
player_y = max(0, min(HEIGHT - square_size, player_y))
# رسم گرافیک
screen.fill(BACKGROUND) # پسزمینه
pygame.draw.rect(screen, RED, (player_x, player_y, square_size, square_size)) # مربع بازیکن
# بهروزرسانی نمایش
pygame.display.flip()
clock.tick(60) # محدود کردن نرخ فریم به 60 فریم بر ثانیه
pygame.quit()
sys.exit()
# یک سورپرایز ساده
import cv2
import numpy as np
# یک آسمان شب زیبا میسازیم
sky = np.zeros((300, 500, 3), dtype=np.uint8)
sky[:,:] = [10, 20, 40] # آبی تیره
# ستارههای تصادفی
for _ in range(50):
x = np.random.randint(0, 500)
y = np.random.randint(0, 300)
cv2.circle(sky, (x, y), 2, (255, 255, 200), -1)
# ماه
cv2.circle(sky, (400, 80), 30, (240, 240, 200), -1)
# متن
cv2.putText(sky, "Good Night!", (150, 150),
cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
cv2.imwrite("night_sky.png", sky)
print("✅ آسمان شب ساخته شد: night_sky.png")
print(" فردا بیشتر کدهای باحال یاد میگیریم!")
import cv2
import numpy as np
import matplotlib.pyplot as plt
print("=" * 50)
print(" برنامه تشخیص مربع قرمز - نسخه Pydroid 3")
print("=" * 50)
# ========================
# قسمت 1: ساخت تصویر با مربع قرمز
# ========================
# ایجاد تصویر سفید
width, height = 600, 400
background_color = (255, 255, 255) # سفید
img = np.full((height, width, 3), background_color, dtype=np.uint8)
# مشخصات مربع قرمز
square_color = (0, 0, 255) # قرمز در مدل BGR
square_thickness = -1 # پر شده
square_size = 120
start_x, start_y = 200, 120 # موقعیت گوشه بالا-چپ
# کشیدن مربع قرمز
end_x = start_x + square_size
end_y = start_y + square_size
cv2.rectangle(img, (start_x, start_y), (end_x, end_y), square_color, square_thickness)
# اضافه کردن چند شکل دیگر برای چالش بیشتر
cv2.circle(img, (450, 300), 60, (255, 0, 0), -1) # دایره آبی
cv2.rectangle(img, (50, 250), (150, 350), (0, 255, 0), -1) # مربع سبز
cv2.putText(img, "Find Red Square", (180, 50),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)
# ذخیره تصویر
filename = "image_with_red_square.png"
cv2.imwrite(filename, img)
print(f"✅ تصویر ساخته و ذخیره شد: {filename}")
print(f" مربع قرمز در موقعیت: X={start_x}, Y={start_y}")
# نمایش تصویر ساخته شده با matplotlib
plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title("تصویر ساخته شده")
plt.axis('off')
# ========================
# قسمت 2: خواندن و پردازش تصویر
# ========================
print("\n در حال پردازش تصویر برای تشخیص مربع قرمز...")
# خواندن همان فایل ذخیره شده
loaded_img = cv2.imread(filename)
if loaded_img is None:
print("❌ خطا: تصویر بارگذاری نشد!")
exit()
# تبدیل از BGR به HSV (برای تشخیص رنگ بهتر)
hsv_img = cv2.cvtColor(loaded_img, cv2.COLOR_BGR2HSV)
# تعریف محدوده رنگ قرمز در HSV
lower_red1 = np.array([0, 70, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 70, 50])
upper_red2 = np.array([180, 255, 255])
# ایجاد ماسکهای قرمز
mask1 = cv2.inRange(hsv_img, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_img, lower_red2, upper_red2)
red_mask = mask1 + mask2
# بهبود ماسک با مورفولوژی
kernel = np.ones((5, 5), np.uint8)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_CLOSE, kernel)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)
# پیدا کردن کانتورها
contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# تصویر برای نمایش نتیجه
result_img = loaded_img.copy()
detected_squares = []
print(f"\n تعداد مناطق قرمز شناسایی شده: {len(contours)}")
# بررسی هر کانتور
for i, contour in enumerate(contours):
x, y, w, h = cv2.boundingRect(contour)
area = cv2.contourArea(contour)
if area > 500:
aspect_ratio = float(w) / h if h != 0 else 0
if 0.8 <= aspect_ratio <= 1.2:
# کشیدن مستطیل سبز دور مربع شناسایی شده
cv2.rectangle(result_img, (x, y), (x + w, y + h), (0, 255, 0), 3)
# نوشتن متن روی مربع
cv2.putText(result_img, f"Square {len(detected_squares)+1}",
(x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
# نمایش اطلاعات در کنسول
print(f"\n✅ مربع قرمز {len(detected_squares)+1} شناسایی شد:")
print(f" موقعیت: X={x}, Y={y}")
print(f" اندازه: {w}x{h} پیکسل")
print(f" مساحت: {int(area)} پیکسل مربع")
print(f" نسبت ابعاد: {aspect_ratio:.2f}")
detected_squares.append((x, y, w, h))
# ========================
# قسمت 3: نمایش نتایج با matplotlib
# ========================
plt.subplot(1, 2, 2)
result_rgb = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)
plt.imshow(result_rgb)
plt.title("نتیجه تشخیص")
plt.axis('off')
plt.tight_layout()
plt.show()
# ذخیره نتیجه
cv2.imwrite("detected_squares.png", result_img)
if detected_squares:
print(f"\n در مجموع {len(detected_squares)} مربع قرمز شناسایی شد!")
print(f"\n تصویر نتیجه ذخیره شد: detected_squares.png")
print("\n" + "=" * 50)
print("مقایسه با مربع اصلی:")
print(f"مربع رسم شده: X={start_x}, Y={start_y}")
print(f"مربع شناسایی شده: X={detected_squares[0][0]}, Y={detected_squares[0][1]}")
# دقت تشخیص
error_x = abs(detected_squares[0][0] - start_x)
error_y = abs(detected_squares[0][1] - start_y)
print(f"خطای تشخیص: X±{error_x}, Y±{error_y} پیکسل")
else:
print("❌ هیچ مربع قرمزی شناسایی شد!")
print("\n" + "=" * 50)
print("برنامه با موفقیت به پایان رسید!")
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# راهاندازی دوربین
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
print(" دوربین فعال شد...")
print("برای خروج: برنامه رو ببندید")
# ایجاد figure برای matplotlib
fig, ax = plt.subplots()
img_display = ax.imshow(np.zeros((240, 320, 3), dtype=np.uint8))
ax.axis('off')
plt.tight_layout()
def update(frame):
ret, frame = cap.read()
if ret:
# پردازش ساده (تبدیل به خاکستری)
processed = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # تبدیل BGR به RGB
img_display.set_data(processed)
return [img_display]
# انیمیشن برای آپدیت مداوم
ani = FuncAnimation(fig, update, interval=50, blit=True)
plt.show()
# وقتی پنجره بسته شد
cap.release()
print("✅ دوربین آزاد شد")









