Hi I want to use opencv to tell me the pixel values of a blank and white image so the output would look like this
10001
00040
11110
00100
Here is my current code but I'm not sure how to access the results of the CV_GET_CURRENT
call.. any help ?
IplImage readpix(IplImage* m_image) {
cout << "Image width : " << m_image->width << "\n";
cout << "Image height : " << m_image->height << "\n";
cout << "-----------------------------------------\n";
CvPixelPosition8u position;
CV_INIT_PIXEL_POS(position, (unsigned char*)(m_image->imageData), m_image->widthStep, cvSize(m_image->width, m_image->height), 0, 0, m_image->origin);
for(int y = 0; y < m_image->height; ++y) // FOR EACH ROW
{
for(int x = 0; x < m_image->width; ++x) // FOR EACH COL
{
CV_MOVE_TO(position, x, y, 1);
unsigned char colour = *CV_GET_CURRENT(position, 1);
// I want print 1 for a black pixel or 0 for a white pixel
// so i want goes here
}
cout << " \n"; //END OF ROW
}
}
In opencv 2.2, I'd use the C++ interface.
cv::Mat in = /* your image goes here,
assuming single-channel image with 8bits per pixel */
for(int row = 0; row < in.rows; ++row) {
unsigned char* inp = in.ptr<unsigned char>(row);
for (int col = 0; col < in.cols; ++col) {
if (*inp++ == 0) {
std::cout << '1';
} else {
std::cout << '0';
}
std::cout << std::endl;
}
}
IplImage struct have a variable char* imageData
- it's just a buffer of all pixels. To read it properly you have to know your image format. For example for RGB888 image 3 first chars in imageData array will represent the r,g,b values of the first pixel at the first row. If you know the image format - you can read the data properly. Image format can be restored reading another values of IplImage structure:
http://opencv.willowgarage.com/documentation/basic_structures.html
Also i think it's more efficient to write the loop like this:
uchar r,g,b;
for (int y = 0; y < cvFrame->height; y++)
{
uchar *ptr = (uchar*) (cvFrame_->imageData + y*cvFrame_->widthStep);
for (int x = 0; x < cvFrame_->width; x++)
{
r = ptr[3*x];
g = ptr[3*x + 1];
b = ptr[3*x + 2];
}
}
This code is for RGB888 image
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With