opencv wyciek pamięci

opencv wyciek pamięci
kameleo327
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Poznań
  • Postów:79
0
Kopiuj
cv::Mat takePhoto() {
	cv::VideoCapture camera(0);
	cv::Mat capturedImage;
	const std::string cameraWindowTitle = "Press 'SPACE' to take a photo";
	const std::string agreementWinTitle = "Do you like this image? yes('y')/no('another')";
	
	int agreeKey = 0;
	do {
		cv::namedWindow(cameraWindowTitle,
			cv::WindowFlags::WINDOW_AUTOSIZE | cv::WindowFlags::WINDOW_KEEPRATIO);

		int takingPicKey = 0;
		while (takingPicKey != ' ') {
			camera >> capturedImage;
			cv::imshow(cameraWindowTitle, capturedImage);
			takingPicKey = cv::waitKey(1);
		}
		cv::destroyWindow(cameraWindowTitle);

		cv::imshow(agreementWinTitle, capturedImage);
		agreeKey = cv::waitKey(0);
		cv::destroyWindow(agreementWinTitle);

	} while (agreeKey != 'y');

	camera.release();
	return capturedImage;
}

Po wejściu w camera.relase(); wyskakuje [ WARN:0] terminating async
Co ta asynchronizacja znaczy?

Czytałem już to(link) i chcę się upewnić tutaj, że to nie moja wina.

edytowany 1x, ostatnio: kameleo327
Bartosz36
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:348
1

edit: Wyciek pamięci o jakim czytałeś to jedno, ale ostrzeżenie o asynchroniczności to co innego. Najwidoczniej gdzieś zostaje Ci otwarte okno, które w zwolnieniu VideoCapture rzuca błędem.

Może zamiast destroyWindow() tu i ówdzie użyj void cv::destroyAllWindows() na końcu kodu.
Najlepiej po wyjściu z camera.release()


ExtendedVector czyli std::vector<T> z wygodą List<T> z .NET (ForEach, FindAll, itd...)
edytowany 1x, ostatnio: Bartosz36

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.