View Full Version : سوال: برسی عکس
www.pc3enter.tk
یک شنبه 29 اسفند 1389, 02:58 صبح
سلام دوستان
یک سوال داشتم
می خواستم ببینم چطور می شود یک عکس را با عکس برسی کنیم و اگر کوچکترین اختلافی هم داشنه باشند به ما اخطار بدهد
به طور مثال ما یک عکس سیب داریم و بعد ان را داخل vb می آوریم
همان عکس را کپی می گیریم و آن را داخل paint می بریم و روی ان چند نقطه می گذارم و بعد عکس را در
picturebox 2 لود می کنیم حال روی دکمه کلیک می کنیم و ویژال بیسیک شروع کمد به برسی
باتشکر
knight-rak
سه شنبه 02 فروردین 1390, 15:58 عصر
سلام
عید همگی مبارک " این اولین پست من در سال جدید هست که تو سایت برنامه نویس مینویسم " ایشالا سال خوبی برای همه باشه
++++++
دوستان این سوال که دوستمون پرسیدن سوال منم هست
برای C# یکی از اعضا یه چیزایی در موردش گفته ولی خوب برای VB من چیزی تا الآن پیدا نکردم
ممنون میشم اگر کسی اطلاعاتی درموردش داره دریغ نکنه
موفق باشید ....
returnx
سه شنبه 02 فروردین 1390, 19:51 عصر
شما می تونید عکس رو در دو Pciturebox باز کنید و نقطه به نقطه با هم مقایسه کنید که البته سرعت بسیار پایین میاد...
نحوه گرفتن مشخصات یک نقطه :
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pixel As Long
pixel = Picture1.Point(X, Y)
Print pixel
End Sub
البته این کدی که گزاشتم با MouseDown کار می کنه اما شما باید خودتون سطر به سطر عکس رو پیمایش کنید(پدر CPU در میاد:قهقهه:)
www.pc3enter.tk
چهارشنبه 03 فروردین 1390, 02:21 صبح
ممنون دوست عزیزم
نمی شود کاری کرد که خود تایمر برسی کنه
هم picture1 و picture2
که کوچکترین اختلافی میان این دو رو نمایش بده
knight-rak
چهارشنبه 03 فروردین 1390, 03:15 صبح
منم ازتون تشکر میکنم ولی این روش رو خوب قبلا هم فکر کنم خودتون برای یه کار دیگه ای پیشنهاد داده بودید که واقعا ایده عالی هست ولی سرعت خیلی پایین هست و خلاصه بی کاربرد میشه
اگر بشه سرعت رو بیشتر کرد که فکر نکنم چون باید تک تک نقاط تصاویر چک بشن
یا اینکه یه راه دیگه ای باشه برای مقایسه با سرعت بالا
موفق باشید ....
returnx
چهارشنبه 03 فروردین 1390, 11:14 صبح
ممنون دوست عزیزم
نمی شود کاری کرد که خود تایمر برسی کنه
هم picture1 و picture2
که کوچکترین اختلافی میان این دو رو نمایش بده
منظورتون رو دقیقا متوجه نشدم ، ولی اگه منظورتون اینه که تایمر هر 1 میلی ثانیه بیاد 2 تا Pixel رو بخونه و بعد با هم مقایسه کنه ، در این روش سرعت بسیار بسیار پایین میاد ، سرعت اجرای حلقه ها بسیار بالا تر از 1 میلی ثانیه است....
منم ازتون تشکر میکنم ولی این روش رو خوب قبلا هم فکر کنم خودتون برای یه کار دیگه ای پیشنهاد داده بودید که واقعا ایده عالی هست ولی سرعت خیلی پایین هست و خلاصه بی کاربرد میشه
اگر بشه سرعت رو بیشتر کرد که فکر نکنم چون باید تک تک نقاط تصاویر چک بشن
یا اینکه یه راه دیگه ای باشه برای مقایسه با سرعت بالا
موفق باشید ....
قطعا روش های دیگری است اما باز هم با این روش کار می کنه(یعنی باز هم برسی Pixel های عکس) با این تفاوت که نحوه پیمایش عکس بهینه تر ، شما باید برای این کار مباحثی مثل پردازش تصاویر رو مطالعه کنید تا یک الگوریتم بهینه برای پیمایش تصاویر پیدا کنید ...
returnx
چهارشنبه 03 فروردین 1390, 12:06 عصر
من بعد از یکم تلاش این برنامه رو نوشتم سرعتشم حده اقل در ابعاد کوچیک عکس بسیار قابل قبوله (الگوریتمش نسبتا بهینه است )
مهمترین ویژگی این الگوریتم این که اگه به طور مثال در وسط عکس دوم یک تغییر پیدا بشه دیگه نیاز نیست تا آخر عکس پیمایش بشه و برنامه پیام می ده...
سورس رو براتون ضمیمه کردم...
همونطور که در سورس می بینید اول Pixel های عکس می خوندم و در 2تا آرایه جدا گانه می ریختم بعد دو آرایه رو با هم مقایسه می کردم که دیدم فوق العاده سرعت پایین هست بعد یکهو روش دوم به ذهنم رسید که فکر می کنم کا رتون را راه بندازه...
quiet_programmer
یک شنبه 07 فروردین 1390, 11:58 صبح
با سلام
که یهو روش دوم به ذهنم رسید که فکر می کنم کا رتون را راه بندازه...
جناب ms2222 (http://barnamenevis.org/member.php?141489-ms2222) به نظر شما این کد شما جواب میده؟
این حلقه ای که شما نوشتین فقط پیکسلهایی که در قطر عکس وجود داره رو برسی میکنه.
While change <> True And x <> Picture2.Width And y <> Picture2.Height
x = x + 1
y = y + 1
f_pixel = Picture1.Point(x, y)
s_pixel = Picture2.Point(x, y)
If s_pixel <> f_pixel Then
change = True
End If
Wend
برای بار اول x=1 و y=1 بعد x=2 و Y=2 و ...
برای بهینه کردن:
اول: قبل از مقایسه pixel به pixel حجم دوتا عکس رو با هم مقایسه کننین که باید برابر باشن.
دوم: میتونین Scale mode عکس و فرم رو به pixel تغییر بدین. به صورت پیش فرض Twip هست که خیلی کوچکتر از pixleه. من امتحان کردم حتی با واحدهای point و سانتی متر و کاراکتر هم جواب میده. البته من وقت نکردم تا رو عکسهای مختلف امتحان کنم ولی به احتمال 99 درصد این روشها هم جواب بده.
هرچی واحد رو بالا بزرگتر انتخاب کنی اونهمه هم زودتر به جواب میرسی
For i = 0 To Me.Picture1.Width
For j = 0 To Me.Picture1.Height
If Me.Picture1.Point(i, j) <> Me.Picture2.Point(i, j) Then
MsgBox ""
GoTo EX
End If
DoEvents
Next
Next
MsgBox "EQ"
EX:
فقط حواست باشه واحدهای عکس اول و عکس دوم و خود فرم یکی باشن.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.