The hosts took the lead on 34 minutes through Rico Clark, who finished from close range after a flick on by Erick Torres in the box.
The Whitecaps almost found an immediate equaliser through Jordan Smith, but his header was cleared off the line by Brad Davis.
After the break Houston looked bright - Barnes had a decent attempt from outside the penalty area, but his effort flashed wide.
Vancouver were reduced to 10 men on 56 minutes when Kendall Watson picked up a second yellow card for a foul on Barnes, before Matias Laba was also dismissed for the visitors less than 10 minutes later.
With a two-man advantage, the hosts controlled the remainder of the match, and Raul Rodrgiuez doubled their lead before the final whistle with a header from a Davis corner.