Konturları bulmak için aşağıdaki kodun çalışma zamanı sırasında segmentasyon hatası hatası alıyorum. Bu formda this gönderim var ama bana fazla yardımcı olmadı. Bilmem gereken bazı sorunlar var findContours Bu, findContours başka bir konudur. Lütfen her iki bağlantıyı da kontrol edin ve bu hatayı gidermek için bana yardımcı olun. Neden segmentasyon hatası hatası alıyorum bilmiyorum.segmentasyon hatası
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
string window_name = "Captured rectangle block";
RNG rng(12345);
double fps;
int thresh = 100;
int main(int argc, const char** argv)
{
VideoCapture cap("video.mp4"); // open the video file for reading
if (!cap.isOpened()) // if not success, exit program
{
cout << "Cannot open the video file" << endl;
return -1;
}
fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video
cout << "Frame per seconds : " << fps << endl;
double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH);
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
Size S(dWidth,dHeight);
while(1)
{
Mat frame;
Mat threshold_output;
int skip_frame = 4;
while(skip_frame)
{
printf("inside while loop\n");
bool bSuccess = cap.read(frame); // read a new frame from video
skip_frame--;
if (!bSuccess) //if not success, break loop
{
cout << "Cannot read the frame from video file" << endl;
break;
}
}
//-- 3. Apply the classifier to the frame
if(frame.empty())
{ printf(" --(!) No captured frame -- Break!"); break; }
std::vector<Rect> faces;
Mat frame_gray;
cvtColor(frame, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
vector<vector<Point> > contours_poly(contours.size());
vector<Rect> boundRect(contours.size());
vector<Point2f>center(contours.size());
vector<float>radius(contours.size());
printf("before finding countrs\n");
threshold(frame_gray, threshold_output, thresh, 255, THRESH_BINARY);
findContours(threshold_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
contours.resize(contours.size());
printf("after finding countrs\n");
for(unsigned int i = 0; i < contours.size(); i++)
{
printf("inside for loop\n");
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
printf("after poly\n");
boundRect[i] = boundingRect(Mat(contours_poly[i]));
printf("after bondrec\n");
minEnclosingCircle((Mat)contours_poly[i], center[i], radius[i]);
}
Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
for(unsigned int i = 0; i< contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
drawContours(drawing, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point());
rectangle(drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
circle(drawing, center[i], (int)radius[i], color, 2, 8, 0);
}
/// Show in a window
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
imshow("Contours", drawing);
int c = waitKey(10);
if((char)c == 'c') { break; }
}
return 0;
}
Hata: Ben OpenCV bilmiyorum ama ... Ben senin contour
vektör findContours()
ile beslerler varsayalım
Frame per seconds : 15
inside while loop
inside while loop
inside while loop
inside while loop
before finding countrs
after finding countrs
inside for loop
Segmentation fault (core dumped)
gdb'yi kullanarak hata ayıklamaya çalışmalı ve hangi satırın bölümlendirme hatası verdiğini bulmalısınız, daha sonra bunu daha kolay bir şekilde düzeltebilirsiniz. Bunun nedeni, contours_poly [i] indekslenmediğinden kaynaklanıyor olsa da (boş) – Wajahat
@Wajahat GDB hata ayıklaması yaptım ve sonucun altında kaldım. Program sinyali SIGSEGV, Segmentation hatası aldı. 0xb7b4534b içinde cv :: _ OutputArray :: create (int, int const *, int, int, bool, int) const()/usr/local/lib/libopencv_core.so.3.1 ' – pradeep