مقایسه رنگ پیکسل های عکس با رنگ داده شده - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مقایسه رنگ پیکسل های عکس با رنگ داده شده

+1 امتیاز

سلام

من یه کد نوشتم که یه عکس میگیره و یه کد رنگ میگیره اگر رنگ پیکسل با کد رنگ یکی بود یه نقطه صفید و اگه نبود یه نقطه سیاه میزاره

یه چچنتا سوال درباره  این کد داشتم اگه میشه جواب بدین

1.توی تابع که من از مرجع استفاده کرم چرا دوباره توی فراخوانیش باید از ستاره اسفاده کنم؟؟

2.توی خط 

Mat_<uchar>::iterator result=res.begin<uchar>();

چرا از uchar استفاده کره و از Vec3b استفاده نرگده مثل توتا خط بالاش؟؟


 Vec3b tc=(100,200,50);
int getd(const  Vec3b&);
int main()
{
	
	namedWindow("ex",0);

	Mat img=imread("d:\\1.jpg");
	Mat res;
	
	int tol=200;
	res.create(img.rows,img.cols,CV_8U);
	Mat_<Vec3b>::const_iterator it=img.begin<Vec3b>();
	Mat_<Vec3b>::const_iterator itend=img.end<Vec3b>();
	Mat_<uchar>::iterator result=res.begin<uchar>();

	for (; it<itend;it++,result++)
	{
		if(getd(*it)<tol)
		{
			*result=255;
		}
		else
			*result=0;
	}
	imshow("ex",res);
	waitKey();

}

int getd( const Vec3b &a)
{
	return (
		abs(a[0]-tc[0])+
		abs(a[1]-tc[1])+
		abs(a[2]-tc[2])) ;


}
سوال شده بهمن 18, 1392  بوسیله ی mohsen (امتیاز 69)   2 6 13
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

1 پاسخ

+3 امتیاز
 
بهترین پاسخ
جواب سوال اولتون چون iterator استفاده شده و این نوع داده ای از نوع اشارهگر هستند و وقتی قصد دارید به تابعی از نوع ارجاع باشه بایستی مقدار اشاره گر را استفاده کنید و بهمین خاطر * استفاده شده.

وقتی شما تصویرتون رنگی باشه و شما قصد داشته باشید به تک تک رنگ ها به صورت مستقل دسترسی داشته باشید می تونید بجای Vec3b از uchar استفاده کنید.
پاسخ داده شده بهمن 19, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد بهمن 19, 1392 بوسیله ی mohsen
...