void readWriteMatrix::writeMat(std::string fname,std::vector<std::vector<double>*>* m){
    std::fstream matOut(fname,std::ios::out | std::ios::trunc);
    int n = m->size();
    matOut<<n<<" "<<n<<std::endl;
    matOut<<std::endl;
    for(auto vv : *m){
        for(auto d : *vv)
         matOut<<d<<" ";
        matOut<<std::endl;
    }
}
Example #2
0
int main(int argc, char *argv[])
{
    if(argc != 3) {
        printf("Usage: cv-canny <in.bmp> <out.bmp>\n");
        exit(0);
    }
    char*   fileNameIn  = argv[1];
    char*   fileNameOut = argv[2];

    // Load source image.  
    cv::Mat src = cv::imread(fileNameIn);
    if(src.data == NULL) {
        printf("Could not load image file: %s\n", fileNameIn);
        exit(0);
    }
    int height  = src.rows;
    int width   = src.cols;
    int channels    = src.channels();
    assert (channels == 3);

    ull t1 = rdtsc();
    // Get luminance of source image as word8s
    cv::Mat srcLum  (src.rows, src.cols, CV_8UC1);

    for(int i = 0; i < height; i++) {
        uchar* rowSrc       = src.ptr(i);
        uchar* rowSrcLum    = (uchar*)srcLum.ptr(i);
    
        for(int j = 0; j < width; j++) {
            float r = (float)rowSrc[j * channels + 0];
            float g = (float)rowSrc[j * channels + 1];
            float b = (float)rowSrc[j * channels + 2];
            float x = ((r * 0.3) + (g * 0.59) + (b * 0.11));
        
            rowSrcLum[j] = (uchar)x;
        }
    }


    // Blur image
    cv::Mat srcBlur = srcLum.clone();
    cv::Size ksize;
    ksize.width = 5;
    ksize.height = 5;
    cv::GaussianBlur(srcLum, srcBlur, ksize, 1, 1, cv::BORDER_REPLICATE);


    // Apply canny algorithm to result
    cv::Mat edges   = srcLum.clone();
    cv::Canny(srcBlur, edges, 60, 70);


    // Create output greyscale image.
    //   The imwrite function doesn't handle float data.
    cv::Mat matOut (src.rows, src.cols, CV_8U);

    for(int i = 0; i < height; i++) {
        uchar* rowEdges     = (uchar*)edges.ptr(i);
        uchar* rowOut       = matOut.ptr(i);

        for(int j = 0; j < width; j++) {
            rowOut[j]   = rowEdges[j];
        }
    }

    ull t = rdtsc() - t1;
    printf("%.2f\n", (t * 1.0) / height / width );
    // Write out the data to a new image.
    cv::imwrite(fileNameOut, matOut);
    
    return 0;
}