dimanche 15 mars 2015

OpenCV cvtColor modifies original image too


I have a function that takes an image, converts it to HSV, and sets V to 100. However, it appears to modify the original image too.



Mat hsvfilter(const Mat& img) {
Mat result;
cvtColor(img, result, CV_BGR2HSV);
for (int j = 0; j < img.rows; j++)
for (int i = 0; i < img.cols; i++)
result.at<Vec3d>(i, j)[2] = 100;
return result;
}


Here's how I call it:



Mat original = imread( "pic.png" );
Mat converted = hsvfilter(original);

namedWindow( "original", CV_WINDOW_AUTOSIZE );
imshow( "original", original );

namedWindow( "converted", CV_WINDOW_AUTOSIZE );
imshow( "converted", converted );

waitKey(0);


Both the original image and the converted images end up having strange black vertical bars. I believe my code has some issues with pointers or memory, but I can't quite figure out where. Any help would be appreciated.


EDIT: HERE'S THE FIXED CODE



Mat hsvfilter(const Mat& img) {
Mat result;
cvtColor(img, result, CV_BGR2HSV);
for (int j = 0; j < result.rows; j++) {
for (int i = 0; i < result.cols; i++) {
result.at<cv::Vec3b>(j, i)[2] = 100;
}
}
return result;
}



Aucun commentaire:

Enregistrer un commentaire