cv::Mat set raw data

Hello.
I want to change the some bytes in the cv::Mat. But I get a segmentation fault error. where am I going wrong?

opencv v3.2

code:


#include <iostream>
#include <opencv2/opencv.hpp>



using namespace cv;
using namespace std;


int main(int argc, char** argv)
{
		
//24x24 pixel 1782 byte bmp image
char raw_bmp_image_bytes[] = "\x42\x4D\xF6\x06\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\xC0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6F\x7E\x64\x1D\x2F\x0C\x34\x06\xA8\x56\x7E\xAD\x2F\x4C\x21\xE8\xC7\x69\x51\x7A\xE6\xC3\x8F\xE1\xD4\xA0\x21\xF8\x5F\x50\x3B\x50\x07\xA5\x6C\xFA\x71\x87\xAB\xA5\x45\x67\x19\x9B\x6D\x3C\x2A\xCB\x31\xC4\xA7\x0C\xED\xF9\xB4\x35\x54\x1F\x6F\x23\x99\x38\x30\x7C\x7A\x03\x8C\x8B\x3C\xFF\x2C\xC4\x55\xF2\xD3\x60\xCB\x63\xE4\x03\x6F\xFC\xD1\x7B\x4C\xB1\x68\xF1\x8E\x46\x84\x24\x5C\x69\xCD\x00\x7A\xD4\x4F\xA7\x54\x1A\x1D\x5A\x59\x3C\xD7\x1E\xC8\x15\x7E\x07\xF9\x36\x90\xD2\x39\xD6\x5D\xDA\xE8\x47\xF6\x44\xE7\x17\xAB\x05\x5D\x43\x9C\x11\xB0\x1D\x1B\xE3\x04\xD4\x87\x5B\x56\x68\x0D\xB9\x67\xAF\xB3\xB0\x2A\x46\xFF\x4F\x24\x0B\x52\x46\x1A\x7D\xFA\x00\x03\xD3\xF6\x9D\x25\x8D\x25\x45\x38\x80\x0A\x9C\x60\x83\xA9\x82\xAA\x65\x0A\x61\x38\x8C\xB8\x27\x8D\x33\x75\xD3\xE9\x8D\x77\xFD\xB5\x79\xB8\xF7\x32\x61\x69\x93\x0F\xE0\xE5\x92\x10\xDA\x7B\xB9\xB9\xAF\x05\xFC\x19\xBF\x55\x4B\x4A\x8B\x62\x93\x70\x4F\x06\x86\x17\x3C\xB0\xB5\x81\xA8\x92\xB1\x90\x07\xB9\x63\x8F\x30\x8E\x5C\x73\x97\x87\xC1\x44\x50\x6F\xAF\x91\x2D\xE4\x33\x69\x8B\xEB\x2B\xFF\xC3\x07\x68\x8B\xA5\x41\xE2\x89\x39\xB9\x1A\x07\x66\x19\xC0\x64\xC1\x26\xD5\x8B\x1A\x08\x81\xA9\xE9\x93\x34\x0D\xBD\x5C\x85\x65\xFD\x23\x69\xF6\x7F\xD1\x35\xE0\x49\x34\x69\x0B\x7F\x9C\x10\x6D\xB2\x3E\x05\xDF\x61\x03\x66\x63\x29\x9F\x7A\xDE\xD5\x47\xEB\x07\x79\x68\x04\x31\xCC\xAF\x49\x74\x3C\x90\xC3\xEB\x6D\x22\x4F\x7F\xC0\x3E\x64\xC7\xB4\xBE\x0D\x4E\xE3\x39\xA1\x8B\x5A\x3C\x72\x3C\x6A\x18\x89\xA9\x8B\x20\xF9\x67\xF1\x61\x4B\x69\x29\x69\xF4\x13\x27\xC2\xE0\xA0\x16\x16\xAB\xAE\x0D\x53\x46\x70\xEE\xD4\x56\x09\xBF\x02\x45\x88\x7F\xE8\xBB\xC7\x34\xC8\xAF\xB2\x82\xF7\xEF\x35\x42\x62\xED\x73\xE5\x28\x1F\x97\xF3\xCD\x2C\x66\x9A\x94\xB1\xF0\x3A\x04\x70\x66\xF1\x4F\xB2\xC8\x58\xDE\xBB\x87\x47\xDA\xBE\x6A\x9A\x4A\xDA\x76\xB8\x77\xF8\x4A\x19\x0E\xA5\x8A\x44\x47\x16\xE0\xE9\xE5\xE4\x22\x13\x9A\x90\x25\x97\x7D\xB8\x72\x2B\x7F\x3A\x00\x12\xC4\x81\x24\x28\xFF\x61\x30\x20\x96\x4F\x37\xEC\x95\xF9\x5C\x40\x9E\x52\x47\x58\x72\xCB\x63\x28\x18\xA1\x91\x79\xDE\xE3\x86\xB6\x04\xBC\xD7\x03\x8D\x0C\x38\xF4\x34\xAB\x0C\xEA\xCE\x79\x67\xAE\xA4\x0D\xFB\x2B\x29\xF1\x8C\x04\xED\xC0\xCB\x69\x79\xD0\x38\x25\xC8\xB0\x88\xD5\x61\xB3\xEB\x81\x18\x1D\x00\xA0\xB3\x48\x5D\xA9\x98\xA9\xDE\x55\x92\x14\x7F\x91\xCD\xF3\x84\x08\x8C\x58\xD3\xB5\x8B\x43\xB0\xA5\x5E\x61\x17\x84\x2C\x58\x7B\x82\x17\xF1\xCC\xCF\x1C\xE4\xE0\x63\xE1\x8C\x3E\x8C\xEE\xCD\xBC\x87\xB4\xD4\xC2\x70\xA4\x4F\x32\x05\x4F\xC3\x0A\x75\x83\x0D\x61\x09\x46\x5C\xD1\xC1\xA8\xB8\x2C\xA3\x5F\x04\x18\xCB\x26\xE8\xAA\x24\x1C\x59\x6C\xB7\x01\x47\x5A\x06\x2A\xC8\x50\x68\xD9\xF5\x1E\xC1\xFA\x51\x9E\x1A\xA1\xCA\xC2\x9D\x22\x17\x6E\xF4\xC0\x85\xA0\x58\xA5\x27\x1A\x59\xB3\x1B\x46\x6D\x8A\xAE\xB1\xA0\xB0\x81\xF2\x64\x8E\xA3\x22\x35\x0B\xC4\x31\x8F\x1B\xE6\xCA\x2B\x50\x61\xCC\x46\xFC\x7E\x38\xC6\x74\x12\x91\xE7\x90\xF3\xA2\xD1\x01\x68\xC7\x40\xE3\xC4\xF2\x4E\xF4\x31\x05\x7A\xE4\x78\x92\x63\x6B\x3C\x3A\x5A\x44\x71\x12\x22\x23\x95\x09\x25\xEC\x7D\xDC\x42\x34\x3E\x32\xD0\x8B\x7A\x78\xBE\x60\xD5\xE3\xA3\x6E\x7E\xEC\x4B\x75\x3F\xCA\xF5\xF4\x5C\x09\x67\x3F\x31\x7D\xC3\x45\x69\x33\x91\xFF\xF5\x82\x21\xFE\xB6\xEB\x7C\xD9\xF7\x2C\xB5\xF6\x9E\x7D\x6D\x5A\xE8\xDE\x38\x2D\xCE\xAA\xA1\x19\x3E\x3C\x16\xA7\xB9\x71\x5D\x34\xAC\x78\x49\x57\x72\xFD\xDF\x2F\xED\xE9\x19\x59\x9B\x25\x90\xE8\xDF\x92\x2C\xD5\x93\x8D\xB9\xEC\xB1\x6C\xAD\xDA\x91\x50\x2B\xD9\xA6\xAD\x9E\xAE\x95\xD6\x56\x73\x75\x45\xC8\x0E\xF9\x1C\xE3\x79\x07\xF9\x68\x61\xC0\xDF\xD8\x4B\x3B\x68\x3A\x35\xA7\xAB\x70\xFE\xC9\x63\x61\xAB\x55\xAE\xF3\x8B\x31\x13\x1E\x7A\x1C\x6D\x58\x76\x4E\xC1\xD7\xDA\xBE\x5E\xC4\xA5\xFF\x2A\xC0\x54\xF1\x9D\x68\x00\xF2\x1F\xCC\xF9\x8B\x2A\x2E\xF0\x9C\x32\x7C\x13\x03\x4B\x8B\xE2\x6F\x05\xF9\xC7\xFB\x5F\xBF\x73\xBA\x8F\x23\xF8\x9E\xC8\xDF\xA0\x53\x3C\x88\x96\x02\xC0\x4D\xB8\x34\xE7\xF0\x36\xFF\xC7\xB6\xDA\x73\x5F\x7B\x23\x06\xC2\x59\xDF\xEE\x3F\x25\x63\x1D\x81\x5B\xB1\x15\x99\x60\xE1\x59\xFC\x74\x44\x55\xBC\x81\xA0\x3C\x94\x29\x9C\x9E\x44\x06\x07\xD0\x76\x58\x99\x55\xCC\x5F\x59\x63\xE6\xAF\x15\x51\x78\xEA\x0A\x7C\xCC\x8E\x4B\x09\xC4\xE9\x52\x0B\x21\x5E\x15\xC5\xCF\x06\x8D\x3D\x57\xCC\x30\x17\xBF\xB9\x11\x02\x06\x6D\x3A\x36\xA3\x8E\x89\xFB\x0A\xF3\x8C\xD7\x0D\xB5\x71\xD8\x88\x27\x8D\x76\xB9\x8D\x7E\x38\xB4\xBF\xAA\xFF\xDE\x38\x2E\x68\xEF\xC0\x8E\x26\xC3\xEA\x5C\x3A\x13\x33\x87\xED\x1B\x1F\x89\x36\x61\xC5\xCE\x7A\xA5\x4A\xEA\xB2\x34\x74\x6B\xA2\xE2\x50\x04\x24\x5D\x99\xD2\x56\x48\x0B\xD3\x07\x90\xBB\x68\xBB\x5A\x14\xBD\x3F\xDF\x49\xB9\x4D\xEF\x1F\x0A\x00\x17\x36\xF8\x26\x30\xDF\xB1\x84\x21\x88\x26\x04\x2C\x75\x5A\x43\x99\x42\x62\x50\xFD\x82\xCA\x28\xD0\x1B\x35\xD4\xB3\x04\xFA\x9B\xED\xB2\x7E\xAE\x2F\xB4\x1F\xF7\x35\x0E\x18\x2C\xA6\x95\x7C\x87\x3E\xFF\x36\x6F\xC6\x5A\x57\xF6\x21\xD1\xC1\x6D\x92\x72\xE0\x81\x19\x39\x79\xCD\x81\xCB\xE8\x0B\xAC\x86\xCD\x89\x84\x99\x18\xD9\x1B\xA7\x94\x55\x46\x5C\x81\x26\xC5\xCF\xC3\x1D\xF9\xD4\x9C\x8A\xD1\x31\x6C\x65\x44\xAD\x6E\xDC\x64\xA9\x11\xFF\x5E\xBA\x57\x60\x31\x95\x18\x55\xF0\xCF\x50\x1B\x1B\xAC\x4B\xD9\x63\x5D\x5C\x6C\xA9\xC4\xCB\xE6\x5C\xF4\x16\x42\xE7\xEC\xDE\xA5\xCC\x95\xED\xB7\x24\xD4\xA7\xCC\x39\x67\x9B\x42\x8B\x30\x79\x9A\xA0\x37\x75\x9E\xE9\x0C\xA9\x8A\xC7\x18\x2B\x04\x45\x45\xB3\xB4\x8D\xE5\x41\x38\x0C\xAC\x29\x73\xBB\xF2\xDA\x6F\x35\x29\x01\xAC\x80\xDD\xC9\xF8\x40\x60\x20\x15\x0C\x90\x07\x30\x42\x2F\xCC\x55\x92\x80\xAF\x50\x28\x7F\x32\x32\xCC\xAF\x1B\xBE\x2B\xA3\x6E\xC5\x44\x34\x4F\xEB\x02\x9F\x01\x7C\x1C\xDA\x4E\x17\xDD\x6F\xDD\x30\x44\x43\x5A\x7B\x45\x52\xDF\x12\xEA\x9C\xAC\xAF\x84\x22\xBB\x96\xAD\x60\xE4\x41\xF5\x39\x84\xEE\x43\xC3\xC2\x8C\x5B\x20\x2A\xC4\x18\x83\xCB\xF8\x89\x5A\x68\x6F\xBF\xFA\x8C\xD1\x32\x62\x43\xA2\x86\x6D\xB9\xC0\x75\x0C\xFF\xB9\xA8\x08\xDB\xAC\x76\xA7\x2A\x96\x1C\x24\x2A\x19\x21\x24\xF4\x4E\x80\xED\x8C\x9E\xAE\xA3\x7A\x3E\x82\x55\x53\x5C\x87\x1D\x28\x56\xD2\xC3\xC5\x21\x8D\xBB\x53\x8B\x98\x97\x3A\xA8\xC8\x0D\x70\x1D\x74\xD6\xD8\xFE\xA8\x82\xA7\x39\x89\x85\xC0\x40\xE4\x3E\x0B\x6F\x24\x78\x18\x67\x76\xA7\x7B\x74\x59\x72\x2D\x74\x0F\x77\xD7\x29\x7A\xCC\x76\x82\xC8\xA2\xD8\x98\x9D\xBB\x50\xA0\xD8\xF4\xB2\xC4\x0B\xD0\xC0\x69\xD4\xCA\x9B\x87\x7E\xF7\xB9\x5D\xAA\xEF\x6E\x02\x1C\x1D\x0D\xD1\xE9\x7B\x2D\x02\xE5\x2C\x10\x75\xD3\x0C\x95\x46\x50\x89\x8F\xDF\xD9\xC6\x2C\x5D\x94\x79\x76\x87\xF7\xA9\x09\x69\x03\x43\x76\x3D\x8D\x8A\xA7\x8E\xE0\x38\x47\xFA\x2F\x42\xEB\xBC\x46\xE7\x04\x7F\xF4\xB8\x66\x25\x8F\x7E\x5D\x48\x34\x7D\x6A\xC0\xD4\x7B\xC3\xDF\x94\x4A\x4E\xE2\x83\x24\x00\x1D\x93\xAC\xF3\x90\x8E\xEE\xC8\x20\xCF\xA9\x5F\xFA\xB9\x00\x01\x35\xF2\x40\x10\x7F\xC3\x96\x29\x96\x6C\x55\x62\x37\x59\xBA\x3C\xB3\x96\x66\x13\x9E\xC8\x81\xFA\x43\xBD\x09\x93\x00\xC8\x8D\xB2\x64\xC1\x3F\x1D\x14\x68\x3B\x49\xC7\x41\x01\x02\x48\x35\x11\x32\xD8\xB2\x5C\xD9\x91\x23\x25\x69\xDD\xEE\xB0\x42\x43\x73\x22\xB9\x1E\x7B\xEA\xED\x6F\x11\x23\xD5\xFB\x60\xFB\xC7\xCC\x79\xF8\xDF\x7E\x7D\x56\x10\x4E\x3A\x64\x62\xC5\x8F\xFC\x2D\x7B\xF5\xCF\x77\x88\x98\x77\x13\x20\xD9\x20\x21\x83\xAD\x9A\xF2\xDD\x7C\xC7\xAD\xE4\x25\x36\x5B\x6C\xB5\x62\x7D\x62\x21\xE2\xE3\x1F\x48\xBC\xC7\x10";


cv::Mat image;

cv::Mat converted_buf(1, 1782, CV_8U, (void*)raw_bmp_image_bytes);
image = imdecode ( converted_buf, IMREAD_COLOR );	

//cout << "image dump = " << format(image, Formatter::FMT_PYTHON);  //for debugging

cout << "---1---\n"; //for debugging


image.at<unsigned char>(0,1,0) = 1;  //working. no problem


cout << "---2---\n";


image.at<unsigned char>(0,1,1) = 1;  //segmentation fault	


cout << "---3---\n";
		
		
    return 0;
}


please clarify, what is image ?

1 Like

help us to spot a direct Mat <-> byte array assignment (i dont think it’s there …)

and, if it’s a cv::Mat, should’t you use image.at<Vec3b>(y,x) instead ?

1 Like

image.at<Vec3b>(0,1)[1] = 1;

worked. thank you.