// shapesorter.c - Identifies the type of blob in a PGM file // written by Ted Burke - last modified 21-11-2011 #include <stdio.h> int main(int argc, char *argv[]) { FILE *f; char line[200]; int n=0,w,h,x,y,th=150,bp=0,ym,xm,histogram[256]={0},p[400][640]; // declare variables if(argc > 1) f=fopen(argv[1],"r"); else f=fopen("input.pgm","r"); // open input file fscanf(f,"%[^\n]\n%[^\n]\n%d %d\n%[^\n]\n",line,line,&w,&h,line); // read file header for(y=0;y<h;++y) for(x=0;x<w;++x) histogram[fscanf(f,"%d",&p[y][x])*p[y][x]]++; // read pixels fclose(f); f=fopen("histogram.csv", "w"); // close input file and open histogram file for(x=0;x<256;++x) fprintf(f,"%d, %d\n",x,histogram[x]); fclose(f); // print histogram data for(y=0;y<h;++y) for(x=0;x<w;++x) if(p[y][x]<=th) ++bp; // count dark pixels for(y=0;y<h;++y) for(x=0;x<w;++x) if((n+=(p[y][x]<=th))==bp/2) ym=y; // find centre y for(x=0;x<w;++x) for(y=0;y<h;++y) if((n-=(p[y][x]<=th))==bp/2) xm=x; // find centre x for(y=ym-10;y<ym+10;++y) for(x=xm-10;x<xm+10;++x) p[y][x]=255*((y<ym||(y==ym&&x<=xm))==(p[ym][xm]<=th)); // draw square if(argc > 2) f=fopen(argv[2],"w"); else f=fopen("output.pgm","w"); // open output file fprintf(f, "P2\n# PGM blob file\n%d %d\n255\n", w, h); // print file header for(y=-1;++y<h;fprintf(f,"\n")) for(x=0;x<w;++x) fprintf(f,"%d ",p[y][x]); // print pixel data fclose(f); // close output file return 0; // exit normally }
Copyright © 2010-2023 Ted Burke, All Rights Reserved.
Blog Stats
- 1,880,076 hits
-
Recent Posts
- Set timezone to Europe/Dublin at command line in Debian Live
- Arduino Nano Timer 1 interrupt example for 100 Hz sampling
- Running Arduino IDE in a Debian Live session
- Installing VirtualBox on Debian 11
- More PRBS turtle graphics
- PRBS visualisation in the style of turtle graphics
- Using ffmpeg to take a snapshot with a webcam in Windows
- Using a serial byte sent from an Arduino to launch an application on the PC
- Generating variations on a code analysis question in a Brightspace quiz
- How to merge two Garmin .fit files and upload to Strava on Ubuntu
- Moving statue of David Foster Wallace
- TU Dubuntu 19.10 – a customised live USB version of Xubuntu Linux 19.10 for TU Dublin
- Using Canon EOS 70D DSLR as a USB web cam in Xubuntu Linux 19.04
- TU Dubuntu – a customised live USB version of Xubuntu Linux 19.04 for TU Dublin
- Using the PHP command line web server to transfer files between devices on a local network
- €5 PPG – photoplethysmogram amplifier / Arduino circuit
- Clap detector circuit / AirSpell typing system
- AirMouse – control mouse pointer in Linux using one switch or by blowing on microphone
- Some RGB fractal doodles
- How to display USB webcam as live video on desktop using mplayer
- Ronan Byrne’s ultra low-cost brain-computer interface
- H-bridge control example for Arduino Nano (ATmega328) – two phase-displaced square waves
- An offcut from the Fraktalismus pattern factory
- Cafe Terrace at Starry Night
- €2 Robots in DIT
- A brief introduction to binary numbers…
- Can the PIC12F675 drive motors directly from its GPIO pins?
- Minimum Viable Program for PIC12LF1572
- dsPIC30F Quadrature Encoder Interface (QEI) – Basic Example
- Simple example program for the PIC12F675 microcontroller
- A simple way to read and write audio and video files in C using FFmpeg (part 2: video)
- A simple way to read and write audio and video files in C using FFmpeg (part 1: audio)
- Fraktalismus Outtakes: Sea Monsters
- Fraktalismus – my presentation at Dublin Maker 2016
- Example code from presentation: Ways of Seeing Julia Sets
- C or Python? Comparison of execution time for Mandelbrot image generation
- Julia Set Explorer
- (no title)
- What I’m working on right now…
- Simple 2-channel hardware PWM example for the MSP430G2452 microcontroller
- RoboSlam @ Dublin Maker – only two days away!
- Generating antiphase PWM signals with the dsPIC30F4011
- Very simple Python / Tkinter GUI to send selected keystrokes via serial port
- Using a dsPIC30F4011 to generating 4 PWM signals with equal duty cycles but at 90 degree phase increments
- Faster Mandelbrot image generation using numpy in Python
- Fractal variations using Python
- Using SendInput to type unicode characters
- Three PWM outputs with three different frequencies using the dsPIC30F4011 microcontroller
- 8-channel PWM with the MSP430G2553
- Simple Phaser Framework example – Flappy Words
Recent Comments
Sanel Lerić on Using a dsPIC30F4011 to genera… Jim on How to display USB webcam as l… Mark on Simple communication with a TC… batchloaf on How to display USB webcam as l… garry on How to display USB webcam as l… - My Tweets
Archives
- April 2022 (2)
- February 2022 (4)
- December 2021 (2)
- November 2021 (1)
- March 2021 (1)
- November 2019 (2)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (3)
- January 2019 (1)
- September 2018 (1)
- May 2018 (1)
- April 2018 (1)
- February 2018 (1)
- January 2018 (1)
- May 2017 (1)
- April 2017 (4)
- February 2017 (3)
- August 2016 (1)
- July 2016 (1)
- February 2016 (2)
- January 2016 (3)
- November 2015 (1)
- July 2015 (1)
- April 2015 (1)
- March 2015 (2)
- November 2014 (1)
- October 2014 (2)
- September 2014 (1)
- April 2014 (1)
- March 2014 (2)
- February 2014 (4)
- January 2014 (5)
- December 2013 (2)
- November 2013 (3)
- October 2013 (1)
- September 2013 (1)
- June 2013 (2)
- May 2013 (1)
- April 2013 (4)
- March 2013 (4)
- February 2013 (5)
- January 2013 (5)
- December 2012 (6)
- November 2012 (7)
- October 2012 (7)
- September 2012 (2)
- August 2012 (8)
- July 2012 (1)
- June 2012 (2)
- May 2012 (4)
- April 2012 (7)
- February 2012 (5)
- January 2012 (1)
- December 2011 (2)
- November 2011 (11)
- October 2011 (3)
- August 2011 (1)
- July 2011 (1)
- May 2011 (1)
- April 2011 (4)
- December 2010 (4)
- November 2010 (2)