Ask Your Question

darknesska's profile - activity

2020-04-19 04:18:14 -0600 received badge  Famous Question (source)
2017-12-05 03:40:54 -0600 received badge  Notable Question (source)
2017-05-31 14:47:55 -0600 received badge  Popular Question (source)
2015-01-02 09:20:03 -0600 commented answer OpenCV v2.4.9 equalizeHist() Function CV_Assert

Thank you for your help I couldn't saw that I didn't use gray instead of img :)

2015-01-02 09:18:48 -0600 received badge  Scholar (source)
2015-01-02 09:12:25 -0600 commented answer OpenCV v2.4.9 equalizeHist() Function CV_Assert

OK, I solved this by simply adding the original channel controls to the code. Which is,

Mat gray;
if(img.channels() == 3){
    cvtColor(img, gray, CV_BGR2GRAY);
}
else if(img.channels() == 4){
    cvtColor(img, gray, CV_BGRA2GRAY);
}
else{       
    gray = img;
}
2015-01-02 09:10:18 -0600 commented answer OpenCV v2.4.9 equalizeHist() Function CV_Assert

Now I get this assertion,

OpenCV Error: Assertion failed (scn ==3 || scn == 4) in cv::cvtColor, file ..\..\..\..\opencv\modules\imgproc\src\color.cpp, line 3737
2015-01-02 06:59:16 -0600 asked a question OpenCV v2.4.9 equalizeHist() Function CV_Assert

Hi everyone, in my project I get webcam images and try to apply histogram equalization. But when I use equalizeHist() function I get CV_Assert. Here, it's the message I get when I run the program. OpenCV Error: Assertion failed (src.type() == CV_8UC1) in cv::equalizeHist, file ........\opencv\modules\imgproc\src\histogram.cpp, line 3128. I don't know how to convert my src image to CV_8UC1. Is there anyone who can help me? Thanks, already.

void detectObjectsCustom(const Mat &img, CascadeClassifier &cascade, vector<Rect> &objects, int flags, Size minFeatureSize, float searchScaleFactor, int minNeighbors, const int scaledWidth = 320){ 
Mat gray;
if(img.channels() == 3){
   cvtColor(img, gray, CV_BGR2GRAY);
}
else if(img.channels() == 4){
   cvtColor(img, gray, CV_BGRA2GRAY);
}
else{       
    gray = img;
}

Mat inputImg;
float scale = img.cols/(float)scaledWidth;
if(img.cols > scaledWidth){
    int scaledHeight = cvRound(img.rows / scale);
    resize(img, inputImg, Size(scaledWidth, scaledHeight));
}
else{
    inputImg = img;
}
cvtColor(inputImg,inputImg,CV_8UC1);    

Mat equalizedImg;
equalizeHist(inputImg, equalizedImg);

cascade.detectMultiScale(equalizedImg, objects, searchScaleFactor, minNeighbors, flags, minFeatureSize);

if(img.cols > scaledWidth){
    for(int i=0; i < (int)objects.size(); i++){
        objects[i].x = cvRound(objects[i].x * scale);
        objects[i].y = cvRound(objects[i].y * scale);
        objects[i].width = cvRound(objects[i].width * scale);
        objects[i].height = cvRound(objects[i].height * scale);
    }
}

for(int i=0; i < (int)objects.size(); i++){
    if(objects[i].x < 0)
        objects[i].x = 0;
    if(objects[i].y < 0)
        objects[i].y = 0;
    if(objects[i].x + objects[i].width > img.cols)
        objects[i].x = img.cols - objects[i].width;
    if(objects[i].y + objects[i].height > img.rows)
        objects[i].y = img.rows - objects[i].height;
}    }
2014-12-29 17:10:47 -0600 received badge  Editor (source)
2014-12-29 16:03:04 -0600 asked a question OpenCV v2.4.9 equalizeHist() Function Memory Leek

Hi everyone, in my project I get webcam images and try to apply histogram equalization. But when I use equalizeHist() function I get Memory Leek message. Is there anyone who can help me? Thanks, already.

void detectObjectsCustom(const Mat &img, CascadeClassifier &cascade, vector<Rect> &objects, int flags, Size minFeatureSize, float searchScaleFactor, int minNeighbors, const int scaledWidth = 320){

Mat gray;
if(img.channels() == 3){
    cvtColor(img, gray, CV_BGR2GRAY);
}
else if(img.channels() == 4){
    cvtColor(img, gray, CV_BGRA2GRAY);
}
else{       
    gray = img;
}

Mat inputImg;
float scale = img.cols/(float)scaledWidth;
if(img.cols > scaledWidth){
    int scaledHeight = cvRound(img.rows / scale);
    resize(img, inputImg, Size(scaledWidth, scaledHeight));
}
else{
    inputImg = img;
}
cvtColor(inputImg,inputImg,CV_8UC1);    

Mat equalizedImg;
equalizeHist(inputImg, equalizedImg);

cascade.detectMultiScale(equalizedImg, objects, searchScaleFactor, minNeighbors, flags, minFeatureSize);

if(img.cols > scaledWidth){
    for(int i=0; i < (int)objects.size(); i++){
        objects[i].x = cvRound(objects[i].x * scale);
        objects[i].y = cvRound(objects[i].y * scale);
        objects[i].width = cvRound(objects[i].width * scale);
        objects[i].height = cvRound(objects[i].height * scale);
    }
}

for(int i=0; i < (int)objects.size(); i++){
    if(objects[i].x < 0)
        objects[i].x = 0;
    if(objects[i].y < 0)
        objects[i].y = 0;
    if(objects[i].x + objects[i].width > img.cols)
        objects[i].x = img.cols - objects[i].width;
    if(objects[i].y + objects[i].height > img.rows)
        objects[i].y = img.rows - objects[i].height;
}}

I think I solved it. I put equalizeHist(inputImg, equalizedImg); inside of a try/catch block. I think it worked.

2014-10-03 08:08:33 -0600 received badge  Supporter (source)