2014-10-03 11:32:28 -0500 received badge ● Famous Question (source) 2014-03-16 17:49:25 -0500 received badge ● Notable Question (source) 2013-11-07 09:34:50 -0500 received badge ● Popular Question (source) 2013-04-13 20:57:15 -0500 asked a question videowriter: integer division by zero error I am using the sample code video-write.cpp(included below for convenience) to learn how to use videos with OpenCV.  #include // for standard I/O #include // for strings #include // Basic OpenCV structures (cv::Mat) #include // Video write using namespace std; using namespace cv; static void help() { cout << "------------------------------------------------------------------------------" << endl << "This program shows how to write video files." << endl << "You can extract the R or G or B color channel of the input video." << endl << "Usage:" << endl << "./video-write inputvideoName [ R | G | B] [Y | N]" << endl << "------------------------------------------------------------------------------" << endl << endl; } int main(int argc, char *argv[]) { help(); if (argc != 4) { cout << "Not enough parameters" << endl; return -1; } const string source = argv[1]; // the source file name const bool askOutputType = argv[3][0] =='Y'; // If false it will use the inputs codec type VideoCapture inputVideo(source); // Open input if (!inputVideo.isOpened()) { cout << "Could not open the input video: " << source << endl; return -1; } string::size_type pAt = source.find_last_of('.'); // Find extension point const string NAME = source.substr(0, pAt) + argv[2][0] + ".avi"; // Form the new name with container int ex = static_cast(inputVideo.get(CV_CAP_PROP_FOURCC)); // Get Codec Type- Int form // Transform from int to char via Bitwise operators char EXT[] = {(char)(ex & 0XFF) , (char)((ex & 0XFF00) >> 8),(char)((ex & 0XFF0000) >> 16),(char)((ex & 0XFF000000) >> 24), 0}; Size S = Size((int) inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), // Acquire input size (int) inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT)); VideoWriter outputVideo; // Open the output if (askOutputType) outputVideo.open(NAME, ex=-1, inputVideo.get(CV_CAP_PROP_FPS), S, true); else outputVideo.open(NAME, ex, inputVideo.get(CV_CAP_PROP_FPS), S, true); if (!outputVideo.isOpened()) { cout << "Could not open the output video for write: " << source << endl; return -1; } cout << "Input frame resolution: Width=" << S.width << " Height=" << S.height << " of nr#: " << inputVideo.get(CV_CAP_PROP_FRAME_COUNT) << endl; cout << "Input codec type: " << EXT << endl; int channel = 2; // Select the channel to save switch(argv[2][0]) { case 'R' : channel = 2; break; case 'G' : channel = 1; break; case 'B' : channel = 0; break; } Mat src, res; vector spl; for(;;) //Show the image captured in the window and repeat { inputVideo >> src; // read if (src.empty()) break; // check if at end split(src, spl); // process - extract only the correct channel for (int i =0; i < 3; ++i) if (i != channel) spl[i] = Mat::zeros(S, spl[0].type()); merge(spl, res); //outputVideo.write(res); //save or outputVideo << res; } cout << "Finished writing" << endl; return 0; }  However, once the program starts to write to the output file, 3 lines from the bottom of the code, I get the error below. I get the same error using either output method, and if I try to just put the src straight back to the output(outputVideo << src). I found another sample program(http://opencv.willowgarage.com/wiki/documentation/cpp/highgui/VideoWriter) that opens the default camera(my built-in webcam), it is able to output just fine. This code is below.  #include "opencv\cv.h" #include "opencv\highgui.h" using namespace cv; int main(int, char**) { VideoCapture capture(1); // open the default camera if ... 2013-03-27 14:25:11 -0500 received badge ● Self-Learner (source) 2013-03-17 16:59:15 -0500 commented answer Unhandled exception using cvCanny Yes, I completely agree. I have also used Mat, my teacher sets up the main and for some reason uses IplImage. The first thing I do is convert that to Mat. But the cvCanny function requires the input and output containers be IplImage. I tried with cvPyrSegmentation, which also requires IplImage*, to use casted Mat structures but got errors. I have not tried that with cvCanny yet. 2013-03-17 15:19:24 -0500 asked a question Unhandled exception using cvCanny I am implementing cvCanny for a segmetation/edge detection project for my image processing class. The program runs multiple segmentation algorithms via command line arguments, and passes the input image to the corresponding algorithm via IplImage*. You can see in the code below, I am taking the pointer passed to the function, and creating a local copy to do the work on. void CannyEdgeSeg (IplImage * image, int)  { const char* name = "Edge Detection Window"; // Kernel size int N = 7; // Set up images IplImage* img; img = cvCloneImage(image); IplImage* img_b = cvCreateImage( cvSize(img->width+N-1,img->height+N-1), img->depth, img->nChannels ); IplImage* out = cvCreateImage( cvGetSize(img_b), IPL_DEPTH_8U, img_b->nChannels ); // Add convolution boarders CvPoint offset = cvPoint((N-1)/2,(N-1)/2); cvCopyMakeBorder(img, img_b, offset, IPL_BORDER_REPLICATE, cvScalarAll(0)); // Make window cvNamedWindow( name, 1 ); // Edge Detection Variables int aperature_size = N; double lowThresh = 20; double highThresh = 40; // Create trackbars cvCreateTrackbar( "High", name, &high_switch_value, 4, switch_callback_h ); cvCreateTrackbar( "Low", name, &low_switch_value, 4, switch_callback_l ); switch_callback_h(0); switch_callback_l(0); for(;;) { switch( highInt ){ case 0: highThresh = 200; break; case 1: highThresh = 400; break; case 2: highThresh = 600; break; case 3: highThresh = 800; break; case 4: highThresh = 1000; break; } switch( lowInt ){ case 0: lowThresh = 0; break; case 1: lowThresh = 100; break; case 2: lowThresh = 200; break; case 3: lowThresh = 400; break; case 4: lowThresh = 600; break; } // Edge Detection cvCanny( img_b, out, lowThresh*N*N, highThresh*N*N, aperature_size ); cvShowImage(name, out); if( cvWaitKey( 15 ) == 27 ) break; } // Release cvReleaseImage( &img ); cvReleaseImage( &img_b ); cvReleaseImage( &out ); cvDestroyWindow( name );  }; However, with this methodology, I get this error once it tries to run cvCanny: Unhandled exception at 0x000007fefd899e5d in Project2.exe: Microsoft C++ exception: cv::Exception at memory location 0x0012f630.. But, if I explicitly call the image to read in my function, rather than using the passed image,  IplImage* img = cvLoadImage("fruits.jpg", 0);  the application runs just fine. I don't understand why it would matter if the image is passed or called explicitly in the function. I was able to usethis exact same method, creating a clone of the passed image, in my other segmentation algorightms without any issues. Is there something specific to cvCanny that I am miss? Any help here would be greatly appreciated. Thanks. 2013-02-10 10:51:57 -0500 asked a question Passing IplImage* to function, original not getting updated I am having trouble passing IplImage* parameters in functions. This is for a school project and unfortunately am not supposed to edit the files doing the calling to my filter functions. In the main, the image is brought in as a command line parameter, then a copy of this is made and passed to the correct filter function, as such: IplImage * floating = cvCreateImage (cvSize (img->width, img->height), IPL_DEPTH_32F, 3); cvConvertScale (img, floating, 1/255., 0); IplImage * filtered; switch (filter.ImageFormat) { case YUV24: filtered = cvCreateImage (cvSize (floating->width, floating->height), IPL_DEPTH_32F, 3); cvCvtColor (floating, filtered, CV_BGR2YCrCb); break; case BGR24: filtered = cvCloneImage (floating); break; case Gray: filtered = cvCreateImage (cvSize (floating->width, floating->height), IPL_DEPTH_32F, 1); cvCvtColor (floating, filtered, CV_BGR2GRAY); break; } cvNamedWindow ("original", CV_WINDOW_AUTOSIZE); cvShowImage ("original", img); filter.ImageFilter (filtered, p); if (filter.ImageFormat == YUV24) { cvCvtColor (filtered, filtered, CV_YCrCb2BGR); } cvNamedWindow (filterName.c_str(), CV_WINDOW_AUTOSIZE); cvShowImage (filterName.c_str(), filtered);  And here is the code from one of my filters: void median (IplImage * image, int k){ Mat matImage(image); //convert IplImage to Mat for work vector bgr_channels; //vector to hold each channel int i,j,m,n; //row/column indeces int kernelSize = (2*k+1)*(2*k+1); vector vals(kernelSize); //kernelSized vector to hold all values of image //within kernel centered at a given pixel int vecIndex = 0; //then sorted to get the median int chanIndex = 0; //index used to for each channel //add padding to account for border issues with convolution copyMakeBorder( matImage, matImage, k, k, k, k, BORDER_REPLICATE); //split channes to do work on individual channels split(matImage, bgr_channels); for(chanIndex=0; chanIndex < matImage.channels(); chanIndex++){ //outer loop for scanning entire image for(i=k; i(m,n); } } insertionSort(vals, 0, vals.size()-1); bgr_channels[chanIndex].at(i,j) = vals[vals.size()/2]; //new value chosen from middle element of sorted vector } } } merge(bgr_channels, matImage); //merge channels together imshow("Median: Mat", matImage); //left this in because the original doesn't get modified //when converting the Mat back to an IplImage image = cvCloneImage(&(IplImage)matImage); //convert backto IplImage for DesktopMain }  The problem is, that the filtered image shown in the main, does not reflect the actual image. It only shows the original image. When I output put the Mat style image matImage in my filter function, it shows the filtered image. Immediately after I convert back to IplImage and set the IplImage* input parameter equal to the the converted, filtered version. But the changes do not reflect the image displayed in the main function. This is making it hard to create some of my other filters such as Gaussian and Sobel, because those filters themselves make calls ... 2013-02-10 10:39:00 -0500 answered a question Missing opencv_core243d.dll I was able to get it going. It turns out I was only adding system variables, I didn't have access on my company laptop to change the path directly. I used the free program Path Editor and everything worked great. 2013-02-04 23:22:48 -0500 commented question Missing opencv_core243d.dll UPDATE: I went ahead and tried everything with the x64 directories even though my version of VS2010 is 32 bits and when I start debugging it seems to have taken care of the missing opencv_243d.dll, but now I get all kinds of linker errors: error LNK2019: unresolved external symbol _cvWaitKey referenced in function _main error LNK2019: unresolved external symbol "void __cdecl cv::imshow(class std::basic_string,class std::allocator > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?\$allocator@D@2@@std@@ABV_InputArray@1@@Z) referenced in function _main And 25 more just as cryptic. If I have the project pointing to the correct directories and lib files, why can't it find them? 2013-02-04 22:54:15 -0500 asked a question Missing opencv_core243d.dll I am using a 32 bit version of VS2010 on W7 64 bit OS. I have installed opencv2.4.3 to my root directory C:. I am having issues with VS seeing the .lib files. When I try to debug I get the error: "The program can't start because opencv_core243.dll is missing from your computer. Try reinstalling the program to fix this problem." I have added C:\opencv\build\x86\vc10\bin to my system path using Windows' 'Edit environment variables for your account' utility. I have added a property sheet to Win32 | Debug where under Common Properties > C/C++ > General I added C:\opencv\build\include to the Additional Include Directories. Then under Common Properties > Linker > General I added C:\opencv\build\x86\vc10\lib to Additional Library Directories, then all of the *d.lib files from this directory to the Additional Dependencies under Linker > Input. Is there something I am missing to get the binaries on the system path? Any help would be greatly appreciated. I have been fighting with this for a week now! Thanks.