๐Ÿ“Œ2์›” 4์ฃผ์ฐจ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ƒํ™ฉ - minho0315/OpenCV GitHub Wiki

๐Ÿ—omr์นด๋“œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์œผ๋กœ ์ธ์‹ํ•ด๋ณด๊ธฐ

์ธ์‹ ์‹คํŒจ ์‚ฌ๋ก€


์–ด๋‘์šด ์‚ฌ์ง„


์œ„์•„๋ž˜ ๋ฐ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์ง„

์ธ์‹ ์„ฑ๊ณต ์‚ฌ๋ก€


๋น„์Šค๋“ฌํžˆ ์ฐ์€ ์‚ฌ์ง„

๐Ÿ—์ธ์‹๋˜๋Š” ์ด๋ฏธ์ง€๋กœ OMR ์ฒดํฌ ํ›„ ํ™•์ธ ํ•ด๋ณด๊ธฐ


omr ์ฒดํฌ๋ฅผ ๋Œ€์ถฉ ํ•œ ์ด๋ฏธ์ง€

๊ฒฐ๊ณผ


omr ์ฒดํฌ๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์Œ

์ฝ”๋“œ ์ˆ˜์ •

for (int i = 0; i < questionCnts.size();)
	{

		int answerKey = 0;


		for (int j = 0; j < StudentNumber; ++i, ++j) // ์ด๋ฏธ์ง€์—์„œ ํฐ ํ”ฝ์…€ ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค.
		{
			Mat mask = Mat::zeros(threshs.size(), CV_8U);
			drawContours(mask, questionCnts, i, 255, CV_FILLED, 8, hierarchys, 0, Point());
			bitwise_and(mask, threshs, mask);
			int a = countNonZero(mask);
			if (countNonZero(mask) > 100) // ๋ฐฐ์—ด ํ–‰๋ ฌ ์—์„œ 0(๊ฒ€์€์ƒ‰)์ด ์•„๋‹Œ ํ”ฝ์…€์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜. โ˜… OMR ์ƒ‰์น ์ด ๋Œ€์ถฉ ๋˜์–ด์žˆ๋‹ค๋ฉด mask ๊ฐ€ ์ปค์•ผํ•˜๋Š” ์ˆ˜์น˜๋ฅผ ์ž‘์€ ์ˆ˜๋กœ ์„ค์ •ํ•˜๋ฉด ๋จ!
			{
				answerKey += num * (int)pow(10, 8 - j);
				drawContours(studentNumbers, questionCnts, i, Scalar(255, 0, 0), 2, 8, hierarchys, 0, Point()); // ์ธ์‹ํ•œ ์› ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ
			}
		}
		id += answerKey;
		num++;
	}

์ˆ˜์ • ํ›„ ๊ฒฐ๊ณผ

ํ•™๋ฒˆ์ธ์‹ ์„ฑ๊ณต

โ€ป ์ฃผ์˜ํ•  ์ 

if๋ฌธ์˜ ์ˆซ์ž๋ฅผ ์ค„์ด๋ฉด ์ธ์‹๋ฅ ์€ ๋†’์•„์ง€์ง€๋งŒ ๊ทธ๋งŒํผ ์ •ํ™•๋„๋Š” ๋–จ์–ด์ง€๊ฒŒ ๋จ!




๐Ÿ—์ธ์‹๋ฅ  ๊ณ„์‚ฐ

์ธ์‹๋ฅ  ๊ณ„์‚ฐ์„ ์œ„ํ•ด omr์นด๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ฒดํฌ 10์žฅ

1


์กฐ๊ฑด

์ธ์‹๋ฅ ์„ ์•Œ๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ์˜ ๋ชจ๋“  ๋ฒˆํ˜ธ ์ฒดํฌ
๋ฒˆํ˜ธ์˜ ์›์„ ๊ฝ‰ ์ฑ„์šฐ์ง€ ์•Š๊ณ  ์ฒดํฌ

2


recognitionValue ๊ฐ’์— ๋”ฐ๋ฅธ ์ธ์‹๋ฅ  ์กฐ์ •

recognitionValue ๊ฐ’์ด ๋‚ฎ์„ ๋•Œ -> ์ธ์‹๋ฅ ์ด ๋†’์Œ

3


recognitionValue ๊ฐ’์ด ๋†’์„ ๋•Œ -> ์ธ์‹๋ฅ ์ด ๋‚ฎ์Œ

4


๐Ÿ—๋ฌธ์ œ๋ณ„ ์ •๋‹ต๋ฅ  ๊ณ„์‚ฐ

1๋ฒˆ~ 20๋ฒˆ ๊ฐ ๋ฌธ์ œ๋ณ„ ์ •๋‹ต๋ฅ ์„ ๊ณ„์‚ฐ

5

โš ๏ธ **GitHub.com Fallback** โš ๏ธ