opencv: cvtColor() - Unhandled exception

asdasfsdfdsf

Mitglied
Hi Leute,
immer wenn ich die Methode cvtcolor() aufrufen möchte um beispielsweise vom RGB in den HSV farbraum zu wechseln bekomme ich folgenden Fehler:

"Unhandled exception at 0x7684b9bc in blatt4aufg2.exe: Microsoft C++ exception: cv::Exception at memory location 0x0023c64c.."

Ich weiß einfach nicht wo der Fehler liegt.
Für Hilfe wäre ich sehr dankbar!
 
ich hab den Code ganz vergessen...
C++:
#include <opencv2/opencv.hpp>
using namespace cv;
#include <iostream>
using namespace std;

int main(){
	VideoCapture video("C:/Users/.../Documents/bla.wmv");
	int width = video.get(CV_CAP_PROP_FRAME_WIDTH);
	int height = video.get(CV_CAP_PROP_FRAME_HEIGHT);

	
	namedWindow("Video");
	namedWindow("erstes Frame");
	namedWindow("Maske");
	Mat firstFrame;
	Mat binaerMaske(height, width, CV_8UC3);

	
	int frameNumber = 0;
	int zaehler=0;
	int ysumme=0;
	int xsumme=0;
	double mittelwertx=0;
	double mittelwerty=0;
	while(true){
		Mat videoFrame;
		Mat videoFrame2(videoFrame.rows,videoFrame.cols,CV_8UC3);
		//cvtColor(videoFrame,videoFrame2,CV_BGR2HSV);
		if (video.read(videoFrame) == false){
			break;
		}
		frameNumber++;
		if(frameNumber == 1){
			videoFrame.copyTo(firstFrame);
		}
		for(int x = 0; x < videoFrame.cols; x++){
			for (int y = 0; y < videoFrame.rows; y++){
				Vec3b pixelVideo = videoFrame.at<Vec3b>(y, x);
				Vec3b pixelFirstFrame = firstFrame.at<Vec3b>(y,x);

				int helligkeitPixelVideo = 
					(pixelVideo[0] + pixelVideo[1] + pixelVideo[2])/3;
				int helligkeitPixelFirstFrame =
					(pixelFirstFrame[0] + pixelFirstFrame[1] + pixelFirstFrame[2])/3;

				int schwelle = 20;
				if(abs(helligkeitPixelVideo - helligkeitPixelFirstFrame) > schwelle){
					// Vordergrund
					Vec3b white (255,255,255);
					binaerMaske.at<Vec3b>(y,x) = white;
					zaehler++;							//zaehlen wie viele weiße es gibt
					xsumme=xsumme+x;
					ysumme=ysumme+y;
				}
				else{
					// Hintergrund
					Vec3b blueback (255,0,0);
					binaerMaske.at<Vec3b>(y,x) = blueback;
				}
			}
		}

		if (zaehler!=0){
			xsumme=xsumme/zaehler;
			ysumme=ysumme/zaehler;
		}
		zaehler=0;
		Point schwerpkt (xsumme,ysumme);
		Point linestart(xsumme,ysumme-20);
		Point linestart2(xsumme-20,ysumme);
		Point lineend(xsumme,ysumme+20);
		Point lineend2(xsumme+20,ysumme);
		Point pt2 (xsumme+20,ysumme+20);

		line(binaerMaske, linestart, lineend, Scalar(0,255,0), 1, 8, 0);
		line(binaerMaske, linestart2, lineend2, Scalar(0,255,0), 1, 8, 0);
		cout<<"xsumme: "<<xsumme<<endl;
		cout<<"ysumme: "<<ysumme<<endl;
		cout<<"zahler: "<<zaehler<<endl;
		imshow("Video", videoFrame);
		imshow("erstes Frame", firstFrame);
		imshow("Maske", binaerMaske);
		waitKey(30);
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Hi,
da steht nirgends in welcher zeile der fehler auftritt. sobald ich cvtColor "auskommentiere" funktioniert nämlich alles, also nehme ich an das es an der funktion liegt.
Das steht im outputfenster von visual (nachdem alle dlls geladen worden sind):

First-chance exception at 0x7684b9bc in blatt4aufg2.exe: Microsoft C++ exception: cv::Exception at memory location 0x0022c754..
Unhandled exception at 0x7684b9bc in blatt4aufg2.exe: Microsoft C++ exception: cv::Exception at memory location 0x0022c754..
The program '[2040] blatt4aufg2.exe: Native' has exited with code -529697949 (0xe06d7363).

des weiteren öffnet sich neben der main.cpp auch noch ein fenster das "xstring" heißt.
 
F10 drücken für die erste Zeile.
Mit F10 in die nächste Zeile.
Mit F10 in die nächste...
Sobald eine Fehlermeldung kommt, hast du die Fehlerzeile.
 
super, danke. also der debug wird bei "cvtColor(videoFrame,videoFrame2,CV_BGR2HSV);" abgebrochen mit der gleichen fehlermeldung.

in zeile 3: "int width = video.get(CV_CAP_PROP_FRAME_WIDTH);" erscheint im command window ein text mit
"ignoring invalid packet_obj_size size"
"freeing incomplete packet size"
 
Zuletzt bearbeitet:
Hi.
asdasfsdfdsf hat gesagt.:
C:
 Mat videoFrame;
        Mat videoFrame2(videoFrame.rows,videoFrame.cols,CV_8UC3);
Was machst du denn hier? Müßtest du nicht videoFrame erstmal mit irgendwas initialisieren (z.B. mit einem Frame aus dem Video?), bevor du auf .rows und .cols zugreifst?

Gruß
 
Zurück