Created
May 12, 2017 06:15
-
-
Save MareArts/7cb58c47372a5fa27723d698728fed3b to your computer and use it in GitHub Desktop.
Mat data access
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "opencv2/opencv.hpp" | |
using namespace cv; | |
using namespace std; | |
int main(int, char) | |
{ | |
namedWindow("img", 1); | |
Mat img = imread("anapji.jpg"); | |
if (img.depth() == CV_8U) | |
printf("8bit unsigend\n"); | |
img. | |
/* | |
cout << img.elemSize() << endl; | |
cout << img.channels() << endl; | |
cout << img.rows << endl; | |
cout << img.step << endl; | |
*/ | |
//using data | |
//for (int i = img.rows / 10 * 7; i < img.rows / 10 * 8; i++) { | |
//for (int i = 0; i < img.rows ; i++) { | |
for (int i = img.rows / 10 * 7; i < img.rows / 10 * 8; i++) { | |
for (int j = 0; j < img.cols; j++) { | |
unsigned char r, g, b; | |
b = img.data[i * img.step + j * img.elemSize() + 0]; | |
g = img.data[i * img.step + j * img.elemSize() + 1]; | |
r = img.data[i * img.step + j * img.elemSize() + 2]; | |
img.data[i * img.step + j * img.elemSize() + 0] = unsigned char(255 - b); | |
img.data[i * img.step + j * img.elemSize() + 1] = unsigned char(255 - g); | |
img.data[i * img.step + j * img.elemSize() + 2] = unsigned char(255 - r); | |
} | |
} | |
//using at | |
for (int i = img.rows / 10 * 2; i < img.rows / 10 * 3; ++i) | |
{ | |
for (int j = 0; j < img.cols; ++j) | |
{ | |
//Vec3b means 'uchar 3ch' | |
unsigned char b = img.at< cv::Vec3b>(i, j)[0]; | |
unsigned char g = img.at< cv::Vec3b>(i, j)[1]; | |
unsigned char r = img.at< cv::Vec3b>(i, j)[2]; | |
//printf("%d %d %d\n", b, g, r); | |
img.at< cv::Vec3b>(i, j)[0] = unsigned char(255 - b); //b | |
img.at< cv::Vec3b>(i, j)[1] = unsigned char(255 - g); //g | |
img.at< cv::Vec3b>(i, j)[2] = unsigned char(255 - r); //r | |
} | |
} | |
//using ptr | |
for (int i = img.rows / 10 * 5; i < img.rows / 10 * 6; i++) { | |
cv::Vec3b* ptr = img.ptr< cv::Vec3b >(i); | |
for (int j = 0; j < img.cols; j++) { | |
unsigned char b1 = (ptr[j][0]); | |
unsigned char g1 = (ptr[j][1]); //note!! | |
unsigned char r1 = (ptr[j][2]); | |
cv::Vec3b bgr = ptr[j]; | |
unsigned char b2 = (bgr[0]); | |
unsigned char g2 = (bgr[1]); //note!! | |
unsigned char r2 = (bgr[2]); | |
ptr[j] = cv::Vec3b(255 - b1, 255 - g1, 255 - r1); | |
} | |
} | |
//using iteration | |
cv::MatIterator_< cv::Vec3b> itd = img.begin< cv::Vec3b>(), itd_end = img.end< cv::Vec3b>(); | |
for (int i = 0; itd != itd_end; ++itd, ++i) { | |
cv::Vec3b bgr = (*itd); | |
(*itd)[0] = 255 - bgr[0]; | |
(*itd)[1] = 255 - bgr[1]; | |
(*itd)[2] = 255 - bgr[2]; | |
} | |
imshow("img", img); //show | |
waitKey(0); | |
destroyAllWindows(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment